Android ListViewselect器颜色

大家好,

我有2个关于Android的ListView的问题:

  1. 我怎样才能得到列表视图的重点行的颜色? 我试图使用ListView.getSelector()方法,根据其文档应该给我什么,我正在寻找,但它给了我一个Drawable对象,我不知道如何检索颜色(如果可能的话)。 ..)。

  2. 我怎样才能设置列表视图的重点行的颜色? 在这里,我尝试在列表视图上使用setSelector()方法,将它传递给一个ColorDrawable对象,但是这样做的结果是列表视图的整个背景被绘成了这种颜色…这不是我想要的当然…

谢谢!

列表select器drawable是一个StateListDrawable – 它包含对列表可以是每个状态的多个可绘制的引用,如select,聚焦,按下,禁用…

虽然你可以使用getSelector()检索drawable,但我不相信你可以从StateListDrawable检索一个特定的Drawable ,也不可能直接从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> 

要添加: @克里斯托弗的答案不适用于API 7/8(根据@ Jonny的正确评论)如果您使用颜色,而不是绘图。 (在我的testing中,使用可绘制的克里斯托弗工作正常)

当使用颜色时,下面2.3和以下FIX

  • Android:整个ListView在焦点上改变颜色,而不仅仅是ListView的子项

根据@Charles Harley的说法,在2.3和以下版本中有一个错误,用一种颜色填充列表项会导致颜色stream出整个列表。 他的修复是定义一个包含你想要的颜色的可绘制的shape ,并使用它来代替颜色。

我build议看看这个链接,如果你只想使用一个颜色作为select,并瞄准Android 2(或至less允许Android 2)。