当我创建一个只包含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>
为什么listview的行为如下?如何在仅包含列表视图的布局中的最后一项之后获取分隔符?
答案 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原因很模糊,甚至一旦我搜索到这个,我就按照上面解释过的那种方式。