ListView分隔符未在Android 5中显示

sr0*_*r09 9 android android-layout android-listview android-5.0-lollipop

我有一个简单的列表视图,我已经为分隔符定义了一个自定义drawable.我已将分隔符高度定义为1dp.列表视图位于片段内.

<shape
    android:shape="line" >
    <stroke
        android:color="@color/custom_color" />

    <gradient android:height="1dp" />

</shape>
Run Code Online (Sandbox Code Playgroud)

它适用于除L以外的所有Android版本.

我缺少什么?

avi*_*ney 9

你应该使用android:shape="rectangle"而不是android:shape="line"使它适用于每个Android版本...(也stroke改为solid)

<shape
    android:shape="rectangle" >
    <solid android:color="@color/custom_color" />
    <gradient android:height="1dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

玩得开心!


And*_*000 8

在任何情况下,您的列表项是否通过重写isEnabled()来禁用,以返回false?Android L中存在更改(错误?),如果项目被禁用,则会导致列表项目分隔符被隐藏.我遇到了同样的问题,我的列表分隔符在L以外的所有内容中工作,结果证明这是原因.

以下是一些讨论过的帖子,以及Google开放的问题:

注释:当ArrayAdapter.isEnabled返回false时,ListView中的消除分隔符

如何在ListView中的禁用项之间添加分隔符? - 棒棒糖

https://code.google.com/p/android/issues/detail?id=83055

如果是这种情况,听起来您可能需要使用自定义视图手动绘制分隔符,并在列表中将分隔符设置为null.我会尝试同样的.


idu*_*olz 6

更新的答案

进一步测试后,看起来分隔符只显示分隔符的高度是否严格小于dividerHeight ListView 的设置.例如:

custom_divider.xml (注意分隔符高度由指定android:width)

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <stroke
        android:width="1dp"
        android:color="$ffff0000" />
</shape>
Run Code Online (Sandbox Code Playgroud)

布局xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:divider="@drawable/custom_divider"
    android:dividerHeight="2dp"/>
Run Code Online (Sandbox Code Playgroud)

...将工作.但这不会:

custom_divider.xml (注意分隔符高度由指定android:width)

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <stroke
        android:width="1dp"
        android:color="$ffff0000" />
</shape>
Run Code Online (Sandbox Code Playgroud)

布局xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:divider="@drawable/custom_divider"
    android:dividerHeight="1dp"/>
Run Code Online (Sandbox Code Playgroud)

我的猜测是谷歌搞砸了绘制Listview分隔线的优化,如果没有足够的空间,就不会绘制它们.

原帖

看起来你需要设置dividerHeightListView和width分隔符的笔划drawable,以便在Android 5上工作.

例:

custom_divider.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >
    <stroke
        android:width="10dp"
        android:color="$ffff0000" />

    <gradient android:height="1dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

布局xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:divider="@drawable/custom_divider"
    android:dividerHeight="20dp"/>
Run Code Online (Sandbox Code Playgroud)