如何在布局底部锚定按钮?

时间:2013-10-27 18:58:45

标签: android layout user-interface relativelayout

我希望OK / Cancel按钮固定在底部(即使列表中有更多项目可以在屏幕上显示)。以下是目前的情况:

enter image description here

按钮位于顶部,而不是底部。

包含按钮的布局:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:orientation="horizontal"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:stretchColumns="true"
             android:id="@+id/buttons_layout">    
    <TableRow>    
        <Button
            android:id="@+id/btnOK"
            android:background="@color/pomegranate"
            android:text="OK"
            android:layout_gravity="fill_horizontal"
            android:layout_weight="1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>        
        <Button
            android:id="@+id/btnCancel"
            android:background="@color/wet_asphalt"
            android:text="Cancel"
            android:layout_weight="1"
            android:layout_gravity="fill_horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>
    </TableRow>
</TableLayout>

复合布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <ListView android:id="@+id/options_list"
              android:layout_width="fill_parent"
              android:layout_height="match_parent">
    </ListView>
    <include layout="@id/buttons_layout"
             android:layout_alignParentBottom="true"
             android:layout_height="match_parent"
             android:layout_below="@id/options_list"/>
</RelativeLayout>

我遵循了我在http://developer.android.com/guide/topics/ui/layout/relative.html

上阅读的指南

我尝试了这个答案 - https://stackoverflow.com/a/6285438/168719 - 它没有帮助我。

我怀疑它可能不起作用,因为列表视图“不知道”它有多高,所以按钮布局也不知道在哪里放置自己。但我通过将ListView高度设置为100dp之类的任意值来排除它。按钮仍然叠加在它上面。

我摆弄了所有布局属性,但我无法让它工作。

除了解决方案之外,我还想知道为什么我的工作不起作用......

5 个答案:

答案 0 :(得分:1)

布局应该是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <ListView android:id="@+id/options_list"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_above="@+id/layout_buttons" >
    </ListView>
    <include android:id="@+id/layout_buttons"
             layout="@id/buttons_layout"
             android:layout_alignParentBottom="true"
             android:layout_height="wrap_parent"
             android:layout_width="wrap_content"/>
</RelativeLayout>

答案 1 :(得分:0)

您可以使用标签来执行此操作

你可以看到这个教程

Android Tab Layout Tutorial

答案 2 :(得分:0)

你可以试试这种方式

<relativelayout1>

<relativelayout2 specify layout below listview with id="list">
    <button1>
    <button2>
</relativelayout2>


<listview id="list">
</listview>

</relativelayout1>

所以这样可以确保无论您的列表有多长,您都可以获得列表下方的按钮。所以你可以在列表下面有一个滚动列表和一个静态按钮

答案 3 :(得分:0)

试试这个。将include标记放在另一个RelativeLayout内,然后确保ListView位于新RelativeLayout

之上
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/buttonsContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true" >

        <include
            android:id="@+id/buttons"
            android:layout_width="wrap_content"
            layout="@layout/buttons_layout" />
    </RelativeLayout>

    <ListView
        android:id="@+id/options_list"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/buttonsContent" >
    </ListView>

</RelativeLayout>

答案 4 :(得分:0)

试试这个

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/layout_buttons"
            android:orientation="vertical" >
        <ListView android:id="@+id/options_list"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
        </ListView>
       </LinearLayout>
        <include android:id="@+id/layout_buttons"
                 layout="@id/buttons_layout"
                 android:layout_alignParentBottom="true"
                 android:layout_height="wrap_parent"
                 android:layout_width="wrap_content"/>
    </RelativeLayout>