Vertical RelativeLayout:如何实现固定的页眉和页脚以及可滚动的主区域?

时间:2013-12-20 14:14:40

标签: android

这是一个我遇到问题的布局(这适用于ListActivity):

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

    <TextView
        android:id="@+id/path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/path" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@android:id/list" />

    <Button
        android:id="@+id/negative_button"
        style="@style/Button"
        android_alignParentBottom="true"
        android:layout_below="@android:id/empty"
        android:layout_weight="1" />

</RelativeLayout>

现在发生的事情是列表位于标题TextView(“路径”)下面,按钮位于底部也应该如此,但ListView未对齐标题(textview)和页脚(按钮)之间。相反,按钮只是在listview的顶部打了一下。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您需要在列表前定义页脚和标题,尝试以下内容:

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

    <TextView
        android:id="@+id/path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <!-- to see the button, you must to declare its width/height here
         and not (as I think you did) in the style.xml -->
    <Button
        android:id="@+id/negative_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Button"
        android:layout_alignParentBottom="true" />
    <!-- also layout_weight doesnot change anything in RelativeLayout -->

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/path"
        android:layout_above="@id/negative_button" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@android:id/list" />

</RelativeLayout>

答案 1 :(得分:0)

TextView“空”不应低于TextView“空”。 如果Button必须位于屏幕底部,您可以使用

android:layout_alignParentBottom="true"

对于Button

否则您可以使用此布局:

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

    <TextView
        android:id="@+id/path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />

    <LinearLayout
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/path">

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

       <TextView
           android:id="@android:id/empty"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_below="@android:id/list" />

     </LinearLayout>

     <Button
        android:id="@+id/negative_button"
        style="@style/Button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/container" />

</RelativeLayout>

或者始终将Button添加为Listview的页脚:

mListView.addFooterView(mButton);

http://developer.android.com/reference/android/widget/ListView.html#addFooterView(android.view.View)

答案 2 :(得分:0)

您使用的唯一内容是ListView,第一个TextView作为“顶栏”,Button作为“底栏”,对吧?如果是这种情况,为什么你保持空TextView
尝试删除它并尝试此布局:

<?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" >
    <TextView
        android:id="@+id/path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" /> 
    <!-- work also with android:layout_height="0dip" -->

    <Button
        android:id="@+id/negative_button"
        style="@style/Button"
        android:layout_gravity="bottom"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>   

看到这些问题,它可能会对你有所帮助:
1. Layout for ListView at top and Buttons in Bottom?
2. Android Layout with ListView between a "top bar" and "bottom bar"
3. Add a button in bottom of listview when the listview is empty (using ListActivity)

希望这会有所帮助,你会得到预期的结果。