Android:禁用listView点击高亮显示

我想禁用当触摸listView行时出现的橙色高亮。到目前为止,在我的xml我已经尝试了以下:

android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"

更多信息:我希望当用户在这个listView对象上触摸屏幕时,没有任何差异。

179727 次浏览

橙色高亮效果是ListView上的风格这篇文章很好地概述了如何重写listView样式。

从本质上讲,您有一个选择器,它根据当前状态指定不同的样式元素。

请看这个简短而快速的解决方案https://stackoverflow.com/a/12242564/185022

把这个添加到你的xml中:

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

对于这个问题,这可能会起作用(我不确定,我不知道是否有更好的解决方案):

你可以应用ColorStateList到你的TextView。

ListView:禁用焦点突出显示,

当你设置你的ListAdapter使用下面的代码

ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c,
new String[] { "Name", "Score" }, to)
{
public boolean areAllItemsEnabled()
{
return false;
}
public boolean isEnabled(int position)
{
return false;
}
};

这将覆盖BaseAdapter类。它还取消了单元格之间的白色边界。

把这个也添加到你的XMl和listselector..希望它会工作

<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/>

在虚拟和真实设备上进行了一些“谷歌”测试后,我注意到下面的代码是有效的:

ArrayAdapter<String> myList = new ArrayAdapter<String>(this, R.layout.list_item, strText) {
public boolean isEnabled(int position)
{
return false;
}
};

注意,我省略了areAllItemsEnabled()部分。

对我来说android:focusableInTouchMode="true"是可行的。android:listSelector="@android:color/transparent"是没有用的。注意,我使用的是一个自定义的列表视图,每行都有一些对象。

没有什么能帮助我,只有这个:

transparent_drawable.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00000000"/>
</shape>

layout.xml:

android:listSelector="@drawable/transparent_drawable"

RoflcoptrException的答案应该做的把戏,但出于某种原因,它不为我工作,所以我张贴的解决方案,为我工作,希望它能帮助别人

<ListView
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
/>

您只需添加: android:cacheColorHint="@android:color/transparent" < / p >

在代码中

listView.setSelector(getResources().getDrawable(R.drawable.transparent));

并添加小透明图像到可绘制文件夹。

< p >: transparent.xml < / p >
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00000000"/>
</shape>

如果使用ArrayAdapterBaseAdapter填充列表项。Override返回isEnabled方法并返回false

 @Override
public boolean isEnabled (int position) {
return false;
}

如果要禁用单个列表视图项的高亮显示,但保持单元格启用,请设置该单元格的背景颜色以禁用高亮显示。

例如,在单元格布局中,设置android:background="@color/white"

作为替代:

listView.setSelector(android.R.color.transparent);

listView.setSelector(new StateListDrawable());

你只能得到从onItemClick得到的pos 和做的事:< / p >

listView.setItemChecked(pos, false);

这是我知道的最好的方法

有一个快速简单的方法可以做到这一点: 在方法:< / p >
private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
//TODO
((ListView)sender).SelectedItem = null;
}

希望能有所帮助;)