Android ListView 选择器颜色

Posted

技术标签:

【中文标题】Android ListView 选择器颜色【英文标题】:Android ListView Selector Color 【发布时间】:2011-01-03 12:40:12 【问题描述】:

大家好,

我有 2 个关于 android 中的 ListView 的问题:

    如何获取列表视图的焦点行的颜色? 我尝试使用 ListView.getSelector() 方法,根据它的文档应该给我我正在寻找的东西,但它给了我一个我不知道如何检索的 Drawable 对象来自(如果可能的话...)的颜色。

    如何设置列表视图的焦点行的颜色? 在这里,我尝试在列表视图上使用 setSelector() 方法,向它传递一个 ColorDrawable 对象,但这样做的结果是列表视图的整个背景都涂上了那种颜色......这当然不是我想要的……

谢谢!

【问题讨论】:

这可能会有所帮助(既有问题又有解决方案):***.com/questions/2065430/… Android 2 中似乎有一个错误会导致颜色影响整个背景 - 检查我的答案,该答案链接到另一个问题上提供的解决方法。 【参考方案1】:

列表选择器drawable是一个StateListDrawable——它包含对列表可能处于的每个状态的多个drawable的引用,例如选中、聚焦、按下、禁用...

虽然您可以使用 getSelector() 检索可绘制对象,但我不相信您可以从 StateListDrawable 检索特定的 Drawable,而且似乎也不可能以编程方式直接从 ColorDrawable 检索颜色.

至于设置颜色,您需要如上所述的StateListDrawable。您可以使用 android:listSelector 属性在您的列表中设置它,在 XML 中定义可绘制对象,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>

【讨论】:

我还会将列表选择器分配给自定义主题,因此您应用程序中的所有列表看起来都相同@drawable/my_list_highlight 这至少不适用于 API 7/8。按下时似乎将整个背景更改为相同的按下颜色,包括其他行的背景,以及行之间的边线(我有黑色)。 @Jonny 在使用可绘制对象时它适用于我,但在使用颜色时不适用于我。添加了参考适用于颜色的良好解决方法的答案。 您好,我正在尝试按照您的建议在我的列表视图中使用选择器,但它有 9 个 png 而不是颜色,我还有一个自定义布局,我在我的列表视图中膨胀并使用选择器作为背景那个自定义布局,你能建议吗?【参考方案2】:

添加:@Christopher's answer 不适用于 API 7/8(根据 @Jonny 的正确评论)如果您使用颜色而不是可绘制对象。 (在我的测试中,根据 Christopher 使用可绘制对象效果很好)

这里是 2.3 及以下版本的修复 使用颜色时:

Android: Entire ListView changes color on focus, not just ListView child item

根据@Charles Harley,在 2.3 及更低版本中存在一个错误,即用颜色填充列表项会导致颜色溢出整个列表。他的解决方法是定义一个包含您想要的颜色的shape drawable,并使用它来代替颜色。

如果您只想使用颜色作为选择器,并且针对 Android 2(或至少允许 Android 2),我建议您查看此链接。

【讨论】:

刚才又咬我了,谢谢你提醒我真正的问题是什么。

以上是关于Android ListView 选择器颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改 ListView 项目背景颜色但保留默认选择器样式?

在 Android 上更改 ListView 项目的背景颜色

ListView Android 不允许选择器工作,也不允许选择

更改时间选择器的文本颜色 [android]

Android选择器长按颜色

在android中使用的颜色选择器