ListView的最后一项之后的分隔符(分隔符)

时间:2013-01-07 15:48:11

标签: android android-listview

当我创建一个只包含ListView的简单布局时,在最后一项之后会显示没有分隔符,这看起来有点难看。

<?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="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />
</RelativeLayout>

enter image description here

但是,如果我在列表视图下添加另一个视图并为列表视图设置android:layout_above属性,我发现在最后一个项目后面会显示分隔符

<?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="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottom"
        android:layout_alignParentTop="true" />

    <TextView
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@android:color/holo_blue_dark"
        android:text="Bottom" />
</RelativeLayout>

enter image description here

为什么listview的行为如下?如何在仅包含列表视图的布局中的最后一项之后获取分隔符?

6 个答案:

答案 0 :(得分:98)

答案很简单:您应该在android:layout_height="wrap_content"中将android:layout_height="match_parent"更改为ListView

你可能会猜到为什么会这样。

答案 1 :(得分:15)

你试过这个吗?

android:footerDividersEnabled="true"

如果不试试这个

<View
android:background="#00ff00"
android:layout_width="fill_parent"
android:layout_height="3dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/YOUR_LIST_ID" />

答案 2 :(得分:7)

在顶部(和/或底部)添加一个空视图以在顶部(或底部)创建分隔符

myList.addHeaderView(new View(context));
myList.addFooterView(new View(context));

答案 3 :(得分:2)

我遇到了解决这个问题的黑客攻击。由于仅当列表视图后面有另一个视图时才显示最后一个分隔符,因此可以通过将其layout_height设置为0dp来使第二个视图不可见。

它仍然是一个黑客,但它使得最后分频器看起来与另一个一致,所以最好尝试手动创建一条水平线,试图猜出正确的颜色和尺寸。

<?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="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/invisible"
        android:layout_alignParentTop="true" />

    <View
        android:id="@+id/invisible"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_alignParentBottom="true" />    
</RelativeLayout>

答案 4 :(得分:1)

我做的事与@Natix描述的类似,但是我没有搞乱列表的包含布局,而只是通过ListView.addFooterView()将空视图作为页脚添加到列表中

答案 5 :(得分:0)

如果您对其进行编码,则显示列表视图时似乎有所不同。但即使你也可以遵循这一点。

首先定义名为Line

的样式
<style name="Line">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">2px</item>
    <item name="android:background">@color/white</item>
</style>

//在上面的样式中,您可以根据需要更改行的高度。

无论您想在何处使用上述行,都可以在xml文件中声明它。

<LinearLayout
android:orientation = "vertical"
.......................
............................>
 <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />


<View
        style="@style/Line"/>

</LinearLayout>

上面的代码在listview下创建了一行。当您想在项目的不同位置使用它时,上述代码最有用。或者,如果只想要一个地方,你可以这样做。

 <LinearLayout
    android:orientation = "vertical"
    .......................
    ............................>
     <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
             />
<View
    android:layout_width="fill_parent"
        android:layout_height="1px"
        android:background="#20b2aa" />

</LinearLayout>

希望这会有所帮助。 BTW原因很模糊,甚至一旦我搜索到这个,我就按照上面解释过的那种方式。