Android线性布局,如何匹配剩余的父级?

时间:2014-08-14 04:12:20

标签: android android-layout android-listview android-linearlayout

我打算在底部创建一个带有两个按钮的列表视图

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

        <ListView
                android:layout_width="match_parent"
                android:layout_height="400dp"
                android:id="@android:id/list"></ListView>
    </LinearLayout>


    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

        <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:text="Add Task"
                android:id="@+id/addTaskButton"></Button>
        <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:text="Add Task2"
                android:id="@+id/addTaskButton2"></Button>
    </LinearLayout>
</LinearLayout>

如何使listview与其余父级的高度相匹配?

如果我将高度设置为listview

            android:layout_height="400dp"

这不适合所有设备

如果我设置了match_parent

            android:layout_height="match_parent"

列表视图将覆盖底部的按钮

6 个答案:

答案 0 :(得分:5)

如果您将其高度设置为0dp且布局权重设置为1,则会填充剩余空间。此外,您不需要LinearLayout周围的ListView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:id="@android:id/list" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"
            android:text="Add Task"
            android:id="@+id/addTaskButton" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:text="Add Task2"
            android:id="@+id/addTaskButton2" />

    </LinearLayout>

</LinearLayout>

答案 1 :(得分:1)

这样可行,我也减少了代码中的行数:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
    </ListView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/addTaskButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"
            android:text="Add Task" >
        </Button>

        <Button
            android:id="@+id/addTaskButton2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:text="Add Task2" >
        </Button>
    </LinearLayout>

</LinearLayout>

答案 2 :(得分:0)

使用此布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.9" >

        <ListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@android:id/list"></ListView>
    </LinearLayout>


    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp" 
            android:layout_weight="0.1">

        <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:text="Add Task"
                android:id="@+id/addTaskButton"></Button>
        <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:text="Add Task2"
                android:id="@+id/addTaskButton2"></Button>
    </LinearLayout>
</LinearLayout>

答案 3 :(得分:0)

您可以使用此布局:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/lv_button"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="@dimen/margin_bottom"
         >
    </ListView>

    <LinearLayout
        android:id="@+id/lv_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="@dimen/margin_bottom"
        android:layout_marginLeft="@dimen/margin_left"
        android:layout_marginRight="@dimen/margin_right"
        android:layout_marginTop="@dimen/margin_top"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn1"
            android:layout_width="0.0dip"
            android:layout_height="@dimen/button_height"
            android:layout_marginRight="@dimen/margin_right"
            android:layout_weight="1.0"           
            android:text="Button1"
            />

        <Button
            android:id="@+id/btn2"            
            android:layout_width="0.0dip"
            android:layout_height="@dimen/button_height"
            android:layout_marginLeft="@dimen/margin_left"
            android:layout_weight="1.0"            
            android:text="Button2"
             />
    </LinearLayout>

</RelativeLayout>

答案 4 :(得分:0)

使用重量和。请参阅此link以了解权重

   <?xml version="1.0" encoding="utf-8"?>

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent" android:weightSum="10">

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8"
       >

    <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
             android:id="@android:id/list"></ListView>
 </LinearLayout>


<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0" 
                    android:layout_weight="2"
      >

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"
            android:text="Add Task"
            android:id="@+id/addTaskButton"></Button>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:text="Add Task2"
            android:id="@+id/addTaskButton2"></Button>
   </LinearLayout>
 </LinearLayout>

答案 5 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ListView
            android:layout_width="match_parent"
            android:layout_height="400dp"
            android:id="@android:id/list"></ListView>
    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"
            android:text="Add Task"
            android:id="@+id/addTaskButton"></Button>
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:text="Add Task2"
            android:id="@+id/addTaskButton2"></Button>
    </LinearLayout>
</LinearLayout>