Android ListView选择器颜色


73

大家好,

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

  1. 如何获取列表视图的重点行的颜色?我尝试使用ListView.getSelector()方法,根据它的文档,该方法应该可以为我提供所需的内容,但是它却为我提供了Drawable对象,我不知道如何从中检索颜色(如果可能的话)。 ..)。

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

谢谢!


这可能有助于(同时存在的问题和解决方案):stackoverflow.com/questions/2065430/...
乌罗什Milivojević

似乎Android 2中存在一个错误,该错误会导致颜色影响整个背景-检查我的答案是否链接到另一个问题上提供的解决方法。
理查德·勒·马修里尔

Answers:


89

列表选择器drawable是一个StateListDrawable-它包含对列表可以处于每种状态的多个drawable的引用,例如选中,集中,按下,禁用...

虽然你可以使用检索绘制的getSelector(),我不相信你可以检索特定DrawableStateListDrawable,也不会似乎可以以编程方式直接从检索颜色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
我还将移动将列表选择器分配给自定义主题,因此您的应用程序中的所有列表都将显示为相同的<item name =“ android:listSelector”> @ drawable / my_list_highlight </ item>
Alex Volovoy 2010年

5
至少这不适用于API 7/8。按下时,似乎会将整个背景更改为相同的按下颜色,包括其他行的背景,以及行之间的边距线(我有黑色)。
强尼

@Jonny在使用可绘制对象时对我有效,但在使用颜色时不起作用。添加了引用适用于颜色的良好解决方法的答案。
理查德·勒·马修里尔

您好,我正在尝试像您建议的那样在列表视图中使用选择器,但是它具有9 png而不是颜色,而且我有一个自定义布局,我在列表视图中进行了充气,​​并使用选择器作为该自定义布局的背景,您可以建议?
2013年

11

补充:如果您使用颜色而不是可绘制对象,则@Christopher的答案不适用于API 7/8(根据@Jonny的正确评论)。(在我的测试中,根据Christopher使用可绘制对象效果很好)

这是使用颜色时用于2.3及以下版本FIX

根据@Charles Harley的说法,在2.3及以下版本中存在一个错误,其中用颜色填充列表项会导致颜色在整个列表中流出。他的解决方法是定义一个shape包含所需颜色的可绘制对象,并使用该可绘制对象代替该颜色。

如果您只想使用颜色作为选择器,并且针对Android 2(或至少允许Android 2),则建议查看此链接。


2
刚才再次让我有点难过,谢谢您提醒我真正的问题是什么。
Reuben Scratton
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.