我在侧边栏中有三个线性布局。我希望第一个填充剩余的空间,另外两个将指定它们的高度。我遇到的问题是第一个视图根本没有拉伸以填充高度。请参阅下面的代码。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#FF44807f"
android:id="@+id/musicSideBar">
<!-- I want this layout to fill whatever vertical space remains -->
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="0dp"
android:background="#FF003938"
android:layout_weight="1">
</LinearLayout>
<!-- this has a list of ImageView, so I set it to wrap_content -->
<LinearLayout
android:layout_below="@id/sidebarHeader"
android:id="@+id/mediaControls"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingTop="8dp"
android:paddingRight="8dp"
android:paddingBottom="8dp"
android:background="#FF095150"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/play_pause_btn"
android:src="@drawable/play_icon"
style="@style/media_button"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/stop_btn"
android:src="@drawable/stop_icon"
style="@style/media_button"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/prev_btn"
android:src="@drawable/prev_icon"
style="@style/media_button"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/next_btn"
android:src="@drawable/next_icon"
style="@style/media_button"
/>
</LinearLayout>
<!-- A custom view that I specify it's height in onMeasure using setMeasuredDimensions -->
<jaywhy13.gycweb.components.NowPlayingView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FF44807f"
android:paddingTop="10dp"
/>
</LinearLayout>
我觉得它应该在Android Studio Preview
中运行但是当我通过模拟器运行它时,它不起作用。
您可以看到,对于模拟器,线性布局根本不会拉伸。
答案 0 :(得分:1)
layout_weight不会像这样工作才能正常工作你需要将布局权重设置为LinearLayout
内的所有布局,这些布局将修复你不想要的所有3个布局的高度。
您应该将第一个布局的高度设置为match_parent
,将下一个布局设置为wrap_content
,并将父布局的重力设置为底部。
这将首先使用height wrap_content放置最底部布局,然后将第二个布局放置为高度wrap_content,并使用任何高度保留最顶层布局
示例:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#FF44807f"
android:gravity="bottom" <!--here-->
android:id="@+id/musicSideBar">
<!-- I want this layout to fill whatever vertical space remains -->
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:background="#FF003938"
>
</LinearLayout>
<!-- this has a list of ImageView, so I set it to wrap_content -->
<LinearLayout
android:layout_below="@id/sidebarHeader"
android:id="@+id/mediaControls"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingTop="8dp"
android:paddingRight="8dp"
android:paddingBottom="8dp"
android:background="#FF095150"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/play_pause_btn"
android:src="@drawable/play_icon"
style="@style/media_button"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/stop_btn"
android:src="@drawable/stop_icon"
style="@style/media_button"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/prev_btn"
android:src="@drawable/prev_icon"
style="@style/media_button"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/next_btn"
android:src="@drawable/next_icon"
style="@style/media_button"
/>
</LinearLayout>
<!-- A custom view that I specify it's height in onMeasure using setMeasuredDimensions -->
<jaywhy13.gycweb.components.NowPlayingView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FF44807f"
android:paddingTop="10dp"
/>
</LinearLayout>
答案 1 :(得分:1)
尝试用RelativeLayout替换外部LinearLayout。在内部视图中为android:layout_height="0dp"
和android:layout_weight="1"
工作。