Android ListViewselect器颜色
大家好,
我有2个关于Android的ListView的问题:
-
我怎样才能得到列表视图的重点行的颜色? 我试图使用ListView.getSelector()方法,根据其文档应该给我什么,我正在寻找,但它给了我一个Drawable对象,我不知道如何检索颜色(如果可能的话)。 ..)。
-
我怎样才能设置列表视图的重点行的颜色? 在这里,我尝试在列表视图上使用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)。