我在侧边栏中有三个线性布局。我希望第一个填充剩余的空间,而其他两个将指定其高度。我遇到的问题是第一个视图根本无法拉伸以填满高度。请参阅下面的代码。

<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>

08-05 04:37