Android:设置listview的选择器颜色不工作

Android:设置listview的选择器颜色不工作,android,listview,Android,Listview,我有一个listview活动,其中我使用以下代码设置选择器颜色。但是,当我选择一个项目时,整个列表将使用选择器颜色高亮显示,这是我不想要的。我哪里做错了?感谢您的帮助 ListView lv = getListView(); lv.setFocusableInTouchMode(true); lv.setBackgroundColor(Color.WHITE); lv.setSelector(R.color.blue); 使用此方法可使用选择器 在res/drawable中创建xml,并为不同

我有一个listview活动,其中我使用以下代码设置选择器颜色。但是,当我选择一个项目时,整个列表将使用选择器颜色高亮显示,这是我不想要的。我哪里做错了?感谢您的帮助

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

使用此方法可使用选择器
res/drawable
中创建xml,并为不同的设置颜色
然后将此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>
<?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>
然后将选择器设置为

lv.setSelector( R.drawable.selector);
lv.setSelector( R.drawable.selector);
lv.setDrawSelectorOnTop(true); // if you have background Drawable on your listView
你必须定下来

android:state_selected = "true"


谢谢你的例子,这样对我更有效…试试这个。 在
res/drawable
中创建一个xml,并为不同的

然后将此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>
<?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>
然后将选择器设置为

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

此处的答案不适用于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按预期工作


来源:,

无需设置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);

很抱歉,我没有足够的声誉在前面的答案中添加评论。

谢谢你的答案Labeeb。但是我在xml错误中得到了错误:不允许使用颜色类型(在'drawable'处,值为'#808080')。谢谢Labeeb。我什么都跟着。但我没有看到任何选择器。没有可见的选择器。我该怎么办?我以前就是这样的。尝试删除setbackgroundcolor当我使用上面答案中的代码执行此操作时,整个ListView将以指定的颜色亮起,而不是我正在选择的单行,{-android.R.attr.state_pressed}是什么意思?