Android ListView选择器颜色

时间:2010-01-10 18:33:31

标签: android android-listview

大家好,

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

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

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

  3. 谢谢!

2 个答案:

答案 0 :(得分:89)

列表选择器drawable是StateListDrawable - 它包含对列表可能的每个状态的多个drawable的引用,如选择,聚焦,按下,禁用......

虽然您可以使用getSelector()检索drawable,但我认为您无法从Drawable检索特定的StateListDrawable,也无法以编程方式直接检索颜色无论如何,来自ColorDrawable

至于设置颜色,您需要StateListDrawable,如上所述。您可以使用android:listSelector属性在列表中设置此项,并在XML中定义drawable,如下所示:

<?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>

答案 1 :(得分:11)

要添加:@Christopher's answer不适用于API 7/8(根据@ Jonny的正确评论)如果您使用的是颜色,而不是drawable。 (在我的测试中,根据Christopher使用drawables工作正常)

使用颜色时, FIX for 2.3及以下

根据@Charles Harley,2.3及以下版本中存在一个错误,其中用颜色填充列表项会导致颜色流出整个列表。他的修复是定义一个包含你想要的颜色的shape drawable,并使用它而不是颜色。

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