ListView分隔符未在Android 5中显示

时间:2014-11-12 00:02:49

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

除了L.

之外,它适用于所有Android版本

我缺少什么?

4 个答案:

答案 0 :(得分: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>

玩得开心!

答案 1 :(得分:8)

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

以下是更多关于此问题的帖子,以及Google开设的一个问题:

点评:Disappearing divider in ListView when ArrayAdapter.isEnabled returns false

How to add dividers between disabled items in ListView? - Lollipop

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

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

答案 2 :(得分:6)

更新回答

经过进一步测试后,看起来分隔线只会显示分隔线的高度严格>是否比ListView设置的dividerHeight高。例如:

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>

布局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"/>

......会奏效吗?但这不会:

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>

布局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"/>

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

原帖

看起来您需要在ListView上设置dividerHeight,并且可以在分区器上绘制抽头width,以便在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>

布局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"/>

答案 3 :(得分:1)

高度属性不是渐变标记下的属性。使用大小attr,如下所示。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="@android:color/holo_blue_dark" />

    <size android:height="1px" />

</shape>