【问题标题】:Android ListView: Header/Footer that fills the remaining space on screenAndroid ListView:填充屏幕剩余空间的页眉/页脚
【发布时间】:2011-08-13 03:16:23
【问题描述】:

我想使用 ListView 制作一个类似聊天的视图,其中新消息出现在屏幕底部(因此我使用 android:stackFromBottom="true")并且我想向 ListView 添加一个标题,它将出现在屏幕顶部。当消息少时,消息头和消息之间会有一个空白区域,当消息很多时,ListView 会滚动并隐藏表头,当底部消息可见时(表头会随着滚动其余的消息)。 问题是我不能告诉 ListView 让它的标题或项目填充屏幕上的剩余空间。 android:layout_height="fill_parent" 没有帮助。我可以使用RelativeLayout 将标题设为静态,但我不想这样做。有什么想法吗?

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    为什么不把列表视图放在一个有 3 行的表格布局中。将listview放在中间行,然后将顶行和底行作为页眉和页脚。

    【讨论】:

    • Marcos 所说的会起作用,但我更喜欢表格布局。您可以将页眉和页脚设置为固定高度(倾角),并允许列表视图根据所使用的设备缩小/增长高度。
    • 与马科斯的回答相同。当空白空间被填满时,我真的需要这个 Header 与 ListView 一起滚动。我在 iPhone 上看到过,但在 Android 上还没有,所以我不知道是否可行。
    【解决方案2】:

    垂直使用 LinearLayout,标题在顶部,ListView 在中间,layout_weight="1",然后是页脚。

    如果您希望 Header 可滚动,一种解决方案。 是将适配器中的位置 1 膨胀为要滚动的标题。

    【讨论】:

    • 但是当我滚动 ListView 时,标题将保持可见。正如我所说的情况有点问题 - 我想要顶部的标题,当没有足够的消息时(并且消息在底部),但是当空间充满消息并且 ListView 变得可滚动时,我想要与 ListView 一起滚动的标题。
    • 嗯.. 有点复杂。检查我的新答案。
    • 感谢您一直回复我!我仍然不知道如何将标题放在屏幕顶部(将其与屏幕顶部对齐)并在没有足够内容填充 ListView 时将其余项目放在底部。在代码中进行一些核心计算是可能的解决方案,但我正在寻找一种更智能的方法。
    【解决方案3】:

    只需制作不同的布局,例如 header_list.xml

    <?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="wrap_content"
        android:background="@drawable/listitem_background"
        android:layout_marginLeft="4dip" android:layout_marginRight="4dip"
        android:gravity="center_vertical|center_horizontal"
    >
    
            <TextView android:id="@+id/nearByLabel" 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:text="Load More Results" 
                android:textColor="#000"
                android:textStyle="bold"
                android:textSize="20sp"
                />
    
    </LinearLayout>
    

    并在你的活动中添加它

    View headerView = inflater.inflate(R.layout.header_list, null);
    yourlistView.addHeaderView(headerView);
    

    【讨论】:

    • 感谢您的回答,但这不是问题所在。我现在解决的方法是将标题放在屏幕顶部,当第一个列表项不再可见时,用动画隐藏它。
    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 2010-09-10
    • 2010-09-10
    相关资源
    最近更新 更多