Android ListView Divider

时间:2010-10-20 14:56:41

标签: 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_divider是:

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

但我看不到任何分隔符。

12 个答案:

答案 0 :(得分:175)

伙计,这就是你应该使用1px而不是1dp或1dip的原因:如果指定1dp或1dip,Android会将其缩小。在一个120dpi的设备上,它变成类似于0.75px的翻译,其转向为0.在某些设备上,转换为2-3像素,并且它通常看起来很丑或马虎

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

“它不再是2012”编辑:您可能必须从特定屏幕密度开始切换到dp / dip

答案 1 :(得分:53)

这是一种解决方法,但对我有用:

创建res / 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>

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

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

至关重要的是要包括这个1px设置。当然,drawable使用渐变(1px),这不是最佳解决方案。我尝试使用中风,但没有让它工作。 (你似乎没有使用样式,所以只需为ListView添加android:dividerHeight =“1px”属性。

答案 2 :(得分:26)

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

答案 3 :(得分:15)

你遇到的问题源于你错过了android:dividerHeight这个你需要的事实,以及你试图在你的drawable中指定一个线宽的事实,这是你无法做到的分隔符有些奇怪的原因。基本上为了使您的示例工作,您可以执行以下操作:

将您的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>

OR:

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

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

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

我假设您知道如何使用这些代码段,如果没有让我知道。基本上你的问题的答案是你不能在drawable中设置分隔符厚度,你必须在那里保留未定义的宽度并使用android:dividerHeight来设置它。

答案 4 :(得分:8)

来自doc:

public void setDivider(Drawable divider) on 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()才能让分隔符显示为没有内在高度

答案 5 :(得分:5)

您的@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:width="1dp",只需将其更改为android:height="1dp",它就可以使用了!

答案 6 :(得分:4)

来自doc

  

文件位置:

     

res / drawable / filename.xml

     

文件名用作资源ID

基本上,您需要在list_divider.xml中放置一个名为res/drawable/的文件,以便您可以R.drawable.list_divider访问它;如果您可以通过这种方式访问​​它,那么您可以在android:divider="@drawable/list_divider"的XML中使用ListView

答案 7 :(得分:2)

有些人可能会遇到一条实线。我通过将android:layerType="software"添加到引用drawable的视图来解决这个问题。

答案 8 :(得分:1)

android docs警告由于舍入错误而消失的事情......也许尝试dp而不是px,也许还可以尝试&gt;首先看看它是否是圆整问题。

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

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

答案 9 :(得分:1)

我有同样的问题。然而,使用1px的视图似乎不适用于我原来的Nexus 7。 我注意到屏幕密度为213,小于xhdpi中使用的240。所以它认为该设备是mdpi密度。

我的解决方案是使dimens文件夹具有dividerHeight参数。我将其设置为2dp文件夹中的values-mdpi,但1dp等文件夹中设为values-hdpi

答案 10 :(得分:1)

你忘记了&#34; r&#34;在divider xml布局中的divider末尾

你调用布局@ drawable / list_divider但你的divider xml被命名为&#34; list_divide&#34;

答案 11 :(得分:-1)

设置android:dividerHeight =&#34; 1dp&#34;

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