大家好,
我有两个关于Android中ListView的问题:
如何获取 listview重点行的颜色? 我试着使用 ListView.getSelector()方法,根据它的文档应该给我我正在寻找的东西,但它给了我一个Drawable对象,我不知道如何检索颜色来自(如果可能的话......)。
如何设置列表视图的焦点行的颜色? 在这里,我尝试在listview上使用 setSelector()方法,向它传递一个ColorDrawable对象,但这样做的结果是列表视图的整个背景都涂成了那种颜色......这当然不是我想要的......
谢谢!
答案 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)。