Android ListView Divider

我有这个代码:

<ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cashItemsList" android:cacheColorHint="#00000000" android:divider="@drawable/list_divider"></ListView> 

其中@ drawable / list_divide是:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="1dp" android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" /> </shape> 

但我没有看到任何分隔线。

帮帮我?

人,这就是为什么你应该使用1px而不是1dp或1dip:如果你指定1dp或1dip,Android会缩小。 在一个120dpi的设备上,它变成了0.75px翻译的那个,它翻转为0.在某些设备上,翻译为2-3像素,通常看起来很丑或马虎

对于分隔符,1px是正确的高度,如果你想要一个像素分隔符,并且是“一切都应该dip”规则的例外之一。 它将在所有屏幕上1像素。 另外,1px通常在hdpi和以上屏幕上看起来更好

“这不是2012年”编辑:你可能不得不从一定的屏幕密度切换到DP / DIP

这是一个解决方法,但适用于我:

创buildres / drawable / divider.xml如下:

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#ffcdcdcd" android:endColor="#ffcdcdcd" android:angle="270.0" /> </shape> 

在listview项目的styles.xml中,我添加了以下几行:

  <item name="android:divider">@drawable/divider</item> <item name="android:dividerHeight">1px</item> 

关键部分是包括这个1px的设置。 当然,可绘制使用渐变(1px),这不是最佳的解决scheme。 我尝试使用中风,但没有得到它的工作。 (您似乎不使用样式,所以只需为ListView添加android:dividerHeight =“1px”属性即可。

添加android:dividerHeight="1px" ,它将工作:

 <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cashItemsList" android:cacheColorHint="#00000000" android:divider="@drawable/list_divider" android:dividerHeight="1px"></ListView> 

你所遇到的问题源于你缺lessandroid:dividerHeight,你需要的事实,以及你试图在你的drawable中指定一个线的重量的事实,你不能用分隔符来做一些事情奇怪的原因。 基本上,让你的例子工作,你可以做下面的事情:

创build您的drawable作为一个矩形或一条线,要么工作,你只是不能尝试设置任何尺寸,所以:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" /> </shape> 

要么:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#8F8F8F"/> </shape> 

然后创build一个自定义样式(只是一个偏好,但我喜欢能够重用的东西)

 <style name="dividedListStyle" parent="@android:style/Widget.ListView"> <item name="android:cacheColorHint">@android:color/transparent</item> <item name="android:divider">@drawable/list_divider</item> <item name="android:dividerHeight">1dp</item> </style> 

最后使用自定义样式声明你的列表视图:

 <ListView style="@style/dividedListStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cashItemsList"> </ListView> 

我假设你知道如何使用这些片段,如果不让我知道。 基本上你的问题的答案是,你不能在可绘制的设置分隔线的厚度,你必须离开宽度undefined那里,并使用android:dividerHeight来设置它。

从文档:

公共无效setDivider(可绘制除法器)ListView上

 /** * Sets the drawable that will be drawn between each item in the list. If the drawable does * not have an intrinsic height, you should also call {@link #setDividerHeight(int)} * * @param divider The drawable to use. */ 

看起来像setDividerHeight必须被调用,以便分频器显示,如果它没有固有的高度

你的@ drawable / list_divide应该看起来像这样:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:height="1dp" android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" /> </shape> 

在你的版本中,你提供了一个android:1dp的宽度;-)只需将其更改为android:1dp的高度,它应该工作!

从文档 :

文件位置:

RES /抽拉/ filename.xml中

文件名被用作资源ID

基本上,你需要把一个名为list_divider.xml的文件放在res/drawable/这样你可以像R.drawable.list_divider访问它。 如果你可以这样访问它,那么你可以在ListView的XML中使用android:divider="@drawable/list_divider"

有些人可能正在经历一个坚实的路线。 我通过在引用drawable的视图中添加了android:layerType="software"来解决这个问题。

Android文档警告消除由于四舍五入错误的东西…也许尝试DP而不是PX,也可能先尝试> 1,看看是否是四舍五入的问题。

请参阅http://developer.android.com/guide/practices/screens_support.html#testing

对于“具有1像素高度/宽度的图像”部分

我遇到过同样的问题。 然而,使视图1px似乎没有工作在我原来的Nexus 7上。我注意到屏幕密度是213,比xhdpi中使用的240还要less。 所以它认为这个设备是一个mdpi密度。

我的解决scheme是,使得dimens文件夹有一个dividerHeight参数。 我把它设置为2dpvalues-mdpi文件夹,但1dpvalues-hdpi 1dp等文件夹。

你在分隔符xml布局的末尾忘了“r”

你调用layout @ drawable / list_divider,但是你的分隔符xml被命名为“list_divide”

设置android:dividerHeight =“1dp”

 <ListView android:id="@+id/myphnview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@drawable/dividerheight" android:background="#E9EAEC" android:clickable="true" android:divider="@color/white" android:dividerHeight="1dp" android:headerDividersEnabled="true" > </ListView>