Android:listview的setselector颜色不起作用

时间:2010-12-03 04:09:55

标签: android listview

我有一个listview活动,我在其中使用以下代码设置选择器颜色。但是当我选择一个项目时,整个列表会以选择器颜色突出显示,这是我不想要的。我在哪里做错了?任何帮助表示赞赏。

ListView lv = getListView();
lv.setFocusableInTouchMode(true);
lv.setBackgroundColor(Color.WHITE);
lv.setSelector(R.color.blue);

5 个答案:

答案 0 :(得分:26)

使用这种方式使用选择器
res/drawable中创建一个xml,并设置不同event state的颜色 然后这个xml作为选择器
例如,让res/drawable/selector.xml

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"   
    android:drawable="@color/gray" />
</selector>

然后在your res\values\colors.xml

中声明灰色
<color name="gray">#808080</color>

然后将选择器设置为

lv.setSelector( R.drawable.selector);

答案 1 :(得分:2)

谢谢你的例子,这样对我来说效果更好......试试吧。 在res/drawable中创建一个xml,并设置不同event state

的颜色

然后这个xml作为选择器
例如,让res/drawable/selector.xml

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/gray" />
</selector>

然后在res\values\strings.xml

中声明灰色
<color name="gray">#808080</color>

然后将选择器设置为

lv.setSelector( R.drawable.selector);
lv.setDrawSelectorOnTop(true); // if you have background Drawable on your listView

答案 2 :(得分:2)

无需制作res / drawable / selector.xml 只需在onCreate方法中添加以下行:

StateListDrawable selector = new StateListDrawable();
selector.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(R.color.pressed_state_color));
selector.addState(new int[]{-android.R.attr.state_pressed}, new ColorDrawable(R.color.normal_state_color));
lv.setSelector(selector);

抱歉,我没有足够的声誉为以前的答案添加评论。

答案 3 :(得分:0)

您必须设置

android:state_selected = "true"

android:state_selected = "false"

答案 4 :(得分:0)

由于背景无效,此处的答案不适用于ListView中的自定义视图。解决方案是将每个项目的背景设置为android:background="?android:attr/activatedBackgroundIndicator"。这是一个例子:

<?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:background="?android:attr/activatedBackgroundIndicator">

      <!-- your item content-->
   </LinearLayout>

之后,StateListDrawable按预期工作。

来源:http://www.michenux.net/android-listview-highlight-selected-item-387.html