如何使一个线性布局填充相关布局的剩余空间?

我有一个有三个线性布局的相关布局作为孩子。 最后一个有固定的高度,android:layout_alignParentBottom设置为“true”。 中间的一个在第一个下方的位置正好,而它的下方则与第三个重叠。

怎么了?

谢谢

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/category" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:orientation="horizontal" > <ImageView android:id="@+id/back_btn" android:layout_width="29dp" android:layout_height="34dp" android:layout_gravity="center_vertical" android:src="@drawable/red_arrow_left" /> <TextView android:id="@+id/cat_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:orientation="horizontal" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" /> <TextView android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" android:padding="10dp" android:text="@string/no_item" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:orientation="horizontal" > //stuff </LinearLayout> </RelativeLayout> 

Solutions Collecting From Web of "如何使一个线性布局填充相关布局的剩余空间?"

Nooo …解决scheme简单得多! 你忘了说你想说的第二个线性布局应该是第三个以上:)是的,第二个线性布局必须同时具有android:layout_below="@+id/category"android:layout_above="@+id/nav_bar" 。 我testing了它,它工作。

但是,当然,你可以使用权重归档相同的结果,这将是更难…

你的XML与我提到的变化(在eclipse中testing):

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/category" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:orientation="horizontal" > <ImageView android:id="@+id/back_btn" android:layout_width="29dp" android:layout_height="34dp" android:layout_gravity="center_vertical" android:src="@drawable/red_arrow_left" /> <TextView android:id="@+id/cat_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/nav_bar" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:orientation="horizontal" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" /> <TextView android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" android:padding="10dp" android:text="@string/no_item" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:orientation="horizontal" > //stuff </LinearLayout> </RelativeLayout> 

您可以尝试使用布局权重来控制子布局的相对大小。 在我的博客上有一篇文章 ,提供了有关使用布局权重的一些信息。

举个例子,试试这个:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/category" android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="horizontal" > <ImageView android:id="@+id/back_btn" android:layout_width="29dp" android:layout_height="34dp" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/cat_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:layout_weight="1" android:orientation="horizontal" > <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" /> <TextView android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:cacheColorHint="@android:color/white" android:padding="10dp" android:text="no_item" /> </LinearLayout> <LinearLayout android:id="@+id/nav_bar" android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" > //stuff </LinearLayout> </LinearLayout> 

RelativeLayout已被LinearLayout取代,所有的相对定位标签都被移除,并且一个layout_weight属性被添加到LinearLayout的中心,这将导致它拉伸以填充可用空间。

你应该添加一个id到你的第二个LinearLayout

  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/category" android:layout_marginTop="10dp" android:@+id/YOUR_ID> 

在第三个布局中添加android:layout_below=@id/YOUR_ID

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/nav_bar" android:layout_below=@id/YOUR_ID android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true">