53

当我创建一个只有一个 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>

在此处输入图像描述

但是,我发现如果我在列表视图下方添加另一个视图并设置列表视图的属性,则会在最后一项之后显示分隔符。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>

在此处输入图像描述

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

4

6 回答 6

102

答案很简单:你应该android:layout_height="wrap_content"android:layout_height="match_parent"你的ListView.

您可能会猜到为什么会发生这种情况。

于 2014-01-08T17:13:42.367 回答
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" />
于 2013-01-07T16:06:42.183 回答
9

将空视图添加到顶部(和/或底部)以在顶部(或底部)创建分隔线

myList.addHeaderView(new View(context));
myList.addFooterView(new View(context));
于 2015-05-14T01:01:27.813 回答
1

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

它仍然是一个hack,但它使最后一个分隔线看起来与另一个一致,所以最好尝试手动创建一条水平线并尝试猜测正确的颜色和尺寸。

<?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>
于 2013-01-07T17:59:18.520 回答
1

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

于 2013-04-30T18:44:04.780 回答
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>

上面的代码在您的列表视图下创建了一行。当您想在项目的各个地方使用上面的代码时,上面的代码最有用。或者如果只想要一个地方,你可以这样做。

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

希望这可以帮助。顺便说一句,原因很模糊,即使我确实搜索过这个,我也按照上面解释的方式进行了操作。

于 2013-01-07T16:07:29.120 回答