Android:禁用listView上的突出显示单击

时间:2010-05-25 18:20:38

标签: android android-listview highlighting

我想禁用触摸listView行时出现的橙色突出显示。到目前为止,在我的xml中,我尝试了以下内容:

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

更多信息:当用户触摸此listView对象的屏幕时,我希望零差别。

15 个答案:

答案 0 :(得分:655)

将此添加到您的xml:

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

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

您可以将ColorStateList应用于TextView。

答案 1 :(得分:188)

RoflcoptrException的答案应该可以解决问题,但由于某些原因它对我不起作用,所以我发布了适用于我的解决方案,希望它可以帮助某人

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

答案 2 :(得分:101)

橙色高亮效果是ListView上的styleThis article概述了如何覆盖listView样式。

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

请参阅此简要快速解决方案https://stackoverflow.com/a/12242564/185022

答案 3 :(得分:62)

来自ListView: Disable Focus Highlight

当您设置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类。它还会取消单元格之间的白色边框。

答案 4 :(得分:38)

将此添加到ur XMl以及listselector ..hope它将起作用

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

答案 5 :(得分:32)

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

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

答案 6 :(得分:13)

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

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

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

答案 7 :(得分:11)

没有什么可以帮助我,但是:

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"

答案 8 :(得分:7)

代码

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

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

像: transparent.xml

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

答案 9 :(得分:5)

对我而言android:focusableInTouchMode="true"是要走的路。 android:listSelector="@android:color/transparent"是没用的。请注意,我使用的是自定义列表视图,每行包含许多对象。

答案 10 :(得分:5)

你只需要添加: android:cacheColorHint="@android:color/transparent"

答案 11 :(得分:4)

作为替代方案:

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

listView.setSelector(new StateListDrawable());

答案 12 :(得分:1)

有快速简便的方法: 方法:

private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    //TODO
    ((ListView)sender).SelectedItem = null;
}

希望它能帮助;)

答案 13 :(得分:0)

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

例如,在您的单元格布局中,设置VrVideoView videoWidgetView = (VrVideoView) findViewById(R.id.video_view); View framelayout = ((ViewGroup) videoWidgetView).getChildAt(0); ArrayList<View> list = getAllChildren(framelayout); for(final View view : list) { if(view.getId() == R.id.transition_frame){ //set visiblity gone for that cardboard information screen view.setVisibility(View.GONE); } else if(view.getId() == R.id.transition_icon){ //perform click action of the same screen's icon which can //redirect you to cardboard vr screen directly(binocular mode) view.performClick(); } }

答案 14 :(得分:0)

你可以从pos获得onItemClick 并做:

listView.setItemChecked(pos, false);

这是我所知道的最佳方式