Android 5 中未显示 ListView 分隔符

Posted

技术标签:

【中文标题】Android 5 中未显示 ListView 分隔符【英文标题】:ListView divider not showing in Android 5 【发布时间】:2015-01-08 17:03:38 【问题描述】:

我有一个简单的列表视图,我为它定义了一个自定义可绘制的分隔线。我已将分隔线高度定义为 1dp。列表视图位于片段内。

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

    <gradient android: />

</shape>

它适用于除 L 之外的所有 Android 版本。

我缺少什么吗?

【问题讨论】:

我会尝试“2dp”,否则我不知道会丢失什么。 我也试过 4dp。没有帮助。 listview.setdivider(R.drawable.line); 尝试使用 px 而不是 dp,因为对于 ldpi,1dp = 0.75 像素,所以它向下舍入为 0,并且不会绘制分隔线。 好点。但我在 Nexus 5(使用 xxhdpi 资产)上运行它 【参考方案1】:

您应该使用android:shape="rectangle" 而不是android:shape="line" 以使其适用于每个android 版本...(也将stroke 更改为solid

<shape
    android:shape="rectangle" >
    <solid android:color="@color/custom_color" />
    <gradient android: />
</shape>

玩得开心!

【讨论】:

【参考方案2】:

您的列表项是否通过覆盖 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。我也会尝试的。

【讨论】:

【参考方案3】:

更新答案

经过进一步测试,似乎只有当分隔线的高度严格小于小于为 ListView 设置的dividerHeight 时,分隔线才会显示。例如:

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

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

布局xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    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:
        android:color="$ffff0000" />
</shape>

布局xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:id="@+id/listView"
    android:divider="@drawable/custom_divider"
    android:dividerHeight="1dp"/>

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

原帖

看起来您需要同时设置 ListView 上的 dividerHeight 和可绘制分隔线的笔划 width 才能在 Android 5 上运行。

例子:

custom_divider.xml

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

    <gradient android: />
</shape>

布局xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:id="@+id/listView"
    android:divider="@drawable/custom_divider"
    android:dividerHeight="20dp"/>

【讨论】:

感谢您的解决方案!!【参考方案4】:

Height 属性不是渐变标签下的属性。使用如下尺寸属性。

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

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

    <size android: />

</shape>

【讨论】:

以上是关于Android 5 中未显示 ListView 分隔符的主要内容,如果未能解决你的问题,请参考以下文章

Android中使用ListView实现分页刷新(线程休眠模拟)

在listView中未选择任何项目时吐司

Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)

使用 altBeacon 库在 Android 中未显示所有信标

在ListView中未更新模态可见性

Android分页GridView/ListView? [关闭]