选择器颜色

大家好,

关于 Android 中的 ListView,我有两个问题:

  1. 我怎样才能 走开的颜色列表视图的焦点行? 我尝试使用 GetSelector ()方法,根据它的文档,它应该给我我想要的东西,但是它给了我一个可绘制的对象,我不知道如何从中检索颜色(如果可能的话...)。

  2. 我怎样才能 准备好了的颜色列表视图的焦点行? 在这里,我尝试在 listview 上使用 SetSelector ()方法,传递给它一个 ColorDrawable 对象,但是这样做的结果是,list 视图的整个背景都被绘制成那种颜色... ... 当然,这不是我想要的... ...

谢谢!

102210 次浏览

列表选择器绘制是一个 StateListDrawable & mdash; 它包含对每个状态的多个绘制的引用,列表可以像选中的、聚焦的、按下的、禁用的..。

虽然你可以使用 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>

补充: 如果你使用的是颜色而不是绘图,@ Christopher 的回答在 API 7/8上无法工作(按照@Jonny 的正确评论)。(在我的测试中,按照 Christopher 的方式使用绘图工具可以很好地工作)

下面是使用颜色时的 2.3及以下版本的 FIX:

根据@Charles Harley 的说法,在2.3及以下版本中存在一个 bug,用一种颜色填充列表项会导致整个列表的颜色流失。他的解决方案是定义一个包含您想要的颜色的 shape可绘制图,并使用它来代替颜色。

我建议你看看这个链接,如果你只是想使用一种颜色作为选择器,并且是针对 Android 2(或者至少允许 Android 2)。