Android ListView页脚视图未放置在屏幕底部

时间:2010-06-22 13:22:56

标签: android listview footer

我确信我错过了一些简单的实现方法,但是已经完成了我能想到的所有已知组合以获得我正在寻找的工作。当ListView项目没有填满页面时,我正试图让ListView页脚位于屏幕底部。

例如,我有一个包含三个项目的ListView的页面和一个FooterView(使用ListView的addFooterView)我想让footerView位于屏幕的底部。当ListView包含足够的项目来滚动屏幕时,footerView应位于列表的末尾(而不是位于屏幕的底部)。

我正在尝试使用的XML如下所示。非常感谢任何和所有帮助!

Layout.xml

<?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"
android:background="@+drawable/background">
<ListView
    android:id="@+id/menu" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:listSelector="@android:color/transparent"
    android:divider="@null">
</ListView></RelativeLayout>

ListViewRow.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
style="@style/Nationwide.menu">
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/nav_item"
    style="@style/Nationwide.menu.row">
    <ImageView 
        android:id="@+id/image_icon"
        style="@style/Nationwide.menu.leftIcon" />
    <TextView 
        android:id="@+id/nav_text" 
        style="@style/Nationwide.menu.text" />
    <ImageView
        android:id="@+id/chevron_symbol"
        style="@style/Nationwide.menu.rightIcon" />
</LinearLayout>
<View
    android:layout_height="1dp"
    android:background="@drawable/nav_item_divider_dark" />
<View
    android:layout_height="1dp"
    android:background="@drawable/nav_item_divider_light" /></LinearLayout>

ListViewFooter.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/footer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true">
<View 
    android:id="@+id/footer_image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentBottom="true" /></RelativeLayout>

爪哇

    LayoutInflater inflater = this.getLayoutInflater();
    View footerView = inflater.inflate(R.layout.footer, null);

    footerView.findViewById(R.id.footer_image).setBackgroundDrawable(resources.getDrawable(R.drawable.cone_footer));

    mMenuListView.addFooterView(footerView);

到目前为止我尝试过的事情包括:

  • 如上所示添加页脚视图
  • 在ListView上添加可绘制资源作为背景(这导致ListView不会跨越整个屏幕宽度,并且由于9-Patch可伸缩区域而以奇怪的方式滚动)
  • 将cone_footer添加为布局
  • 中的单独视图

提前致谢!

5 个答案:

答案 0 :(得分:16)

  

我希望那个footerView坐在   屏幕的底部。

这不是addFooterView()的工作方式。

  

当ListView包含足够的项目来滚动屏幕时,   footerView应该坐在最后   清单(不在底部)   屏幕)。

这也不是addFooterView()的工作方式。

如果您希望它与列表一起滚动(即,如果三个列表项占据屏幕的上半部分,页脚就在这三个项目的正下方),则使用addFooterView() ...但是然后页脚总是滚动列表。

如果您希望它不滚动列表,一种方法是使用RelativeLayout作为您的父级,将页脚锚定到屏幕底部,并让ListView位于屏幕之间顶部和页脚......但页脚从不滚动。

答案 1 :(得分:3)

答案 2 :(得分:1)

你要做的事实上是相当复杂的。您希望“页脚”与列表一起滚动(有时至少),这意味着它需要包含在ListView布局中。但是你也(其他时候)想要相对于屏幕放置相同的页脚,或者更准确地说相对于ListView的某些父布局(或父级父级等),这意味着页脚不需要包含在ListView中。这两种情况需要相互排斥地放置相关元素。

但这不是SDK的设计上的糟糕设计。从您的描述看来,您可能会以错误的方式思考问题。从概念上讲,这个元素是否真的是一个页脚,如果它不总是在列表的“脚”,但有时一直在屏幕的底部?你可以通过组合ListViews,ScrollViews,RelativeLayouts和一些android:layout_height技巧来制作你想要的那种布局。然而,简单地采用替代方法来设计可能是一个更好的举措。

答案 3 :(得分:1)

同样如此

<RelativeLayout>
    <include android:id="@+id/header" layout="@layout/header" android:layout_width="fill_parent" android:layout_alignParentTop="true" />

    <include android:id="@+id/footer" layout="@layout/footer" android:layout_width="fill_parent" android:layout_alignParentBottom="true" /> 

    <ListView android:layout_below="@id/header" android:layout_above="@id/footer"/> 
</RelativeLayout>

答案 4 :(得分:1)

这是我用来实现这种行为的边缘技巧。

基本上你将ListView设置为wrap_content,然后使用负边距将Button放在ListView底部边距空间中。

这使用固定高度,但你也可以在运行时测量按钮,并设置正负边距。

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

<ListView
    android:id="@+id/list_item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="50dp"
    android:layout_alignParentTop="true" />

<Button
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_below="@+id/list_item"
    android:paddingBottom="@dimen/margin"
    android:layout_topMargin="-50dp"
    android:paddingTop="@dimen/margin"
    android:text="@string/add" />

</RelativeLayout>