Android ListView选择器颜色

Whi*_*erK 73 android android-listview

大家好,

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

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

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

谢谢!

Chr*_*Orr 89

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

虽然您可以使用检索drawable getSelector(),但我不相信您可以Drawable从a 检索特定的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>
Run Code Online (Sandbox Code Playgroud)

  • 我还会将列表选择器分配给自定义主题,因此应用程序中的所有列表看起来都相同<item name ="android:listSelector"> @ drawable/my_list_highlight </ item> (12认同)
  • 这至少不适用于API 7/8.它似乎会在按下时将整个背景更改为相同的按下颜色,包括其他行的背景,以及行之间的边缘线(我有黑色). (5认同)

Ric*_*ier 11

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

使用颜色时,这里是2.3及以下FIX:

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

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

  • 刚才再次咬我一下,谢谢你提醒我真正的问题是什么. (2认同)