我在侧边栏中有三个线性布局。我希望第一个填充剩余的空间,而其他两个将指定其高度。我遇到的问题是第一个视图根本无法拉伸以填满高度。请参阅下面的代码。
<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预览中一样
但是,当我通过模拟器运行它时,它不起作用。
您可以看到,对于模拟器来说,线性布局根本不会拉伸。
最佳答案
layout_weight无法像这样正常工作,您需要为LinearLayout
内的所有布局设置布局权重,以固定所有3个不需要的布局的高度。
您应该仅将第一个布局的高度设置为match_parent
,将下一个布局的高度设置为wrap_content
,并将父布局的重力设置为底部。
这将使最底部的布局首先具有高度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>