Android -禁用列表视图选择高亮,但保持OnClick启用



我想禁用当用户从代码中选择一行(listSelector)时出现的突出显示。我不想禁用onClick和enabled设置(我仍然想听点击,只是想删除高亮)。

ListView XML中指定android:listSelector="@android:color/transparent"

创建一个透明颜色的可绘制对象,就像这样:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:drawable="@android:color/transparent"/>
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_light" />
<item android:state_focused="true"  android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_light" />
<item android:state_focused="true"  android:state_pressed="true" android:drawable="@color/transparent" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@color/transparent" />
<item android:state_focused="true"  android:drawable="@drawable/list_focused_holo" />
</selector>

然后通过代码或XML设置:

listView.setSelector(R.drawable.my_transparent_selector);

这个方法的javadoc说:

设置一个Drawable,用来突出显示当前选中的项目。

和XML属性是:

android: listSelector

你可以使用所有的状态,记住你也有焦点状态

我是这样做的:

通过添加ListView的两个属性。

android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"

你的ListView应该如下所示:

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:cacheColorHint="@android:color/transparent"
    android:listSelector="@android:color/transparent">
</ListView>

try listview.setSelector(new ColorDrawable(Color.TRANSPARENT));

突出显示效果是listSelector上的一种样式。您可以重写listSelector样式。

这是一个listview的例子:Android:在listview上禁用高亮点击

最新更新