2010-01-10 144 views
71

大家好,Android的ListView控件选择颜色

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

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

  2. 我该如何才能设置 listview的重点行的颜色? 在这里,我尝试在列表视图上使用setSelector()方法,并将它传递给一个ColorDrawable对象,但这样做的结果是列表视图的整个背景都以该颜色绘制......并且这不是我当然想要什么......

谢谢!

+0

这可能有帮助(有问题和解决方案):http://stackoverflow.com/questions/2065430/fixed-android-detecting-focus-pressed-color –

+0

似乎有一个Android 2中的错误,导致影响整个背景的颜色 - 检查我的答案,链接到另一个问题上提供的解决方法。 –

回答

88

列表选择可绘制的是StateListDrawable —它包含引用到多个可绘制每个列表可以像选择,有重点,按下状态,残疾人......

虽然你可以使用绘制检索getSelector(),我不相信你可以从StateListDrawable中检索到一个具体的Drawable,看来也不可能通过编程从ColorDrawable直接检索颜色。

至于设置颜色,你需要一个StateListDrawable如上所述。您可以设置此使用android:listSelector属性列表上,定义绘制在这样的XML:

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

我也会移动分配列表选择器到一个自定义主题,所以在你的应用程序中的所有列表看起来都是一样的 @ drawable/my_list_highlight

+0

如何使用这些代码进行长按事件? –

+0

@Alex:你能告诉我该怎么做吗? – eugene

11

补充:@Christopher's answer不会对API 7/8(按@强尼的正确意见)的工作,如果你是使用颜色,而不是绘图。使用颜色时(在我的测试中,使用可绘按照克里斯托弗正常工作)

这里是FIX 2.3及以下

按@Charles哈雷,在2.3和以下版本中存在一个错误,即使用颜色填充列表项会导致颜色流出整个列表。他的修正是定义一个包含所需颜色的shape drawable,并用它来代替颜色。

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

+2

刚才我再次提到了这一点,谢谢你提醒我真正的问题是什么。 –