Android: отключение подсветки в listView нажмите

Я хочу отключить оранжевую подсветку, которая возникает при касании строки listView. До сих пор в моем xml я пробовал следующее:

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

дополнительная информация: я хочу, чтобы была нулевая разница, когда пользователь касается экрана этого объекта listView.

15 ответов


добавьте это в свой xml:

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

и для проблемы это может сработать (я не уверен, и я не знаю, есть ли лучшие решения):

можно использовать ColorStateList для вашего TextView.


ответ RoflcoptrException должен сделать трюк, но по какой-то причине он не сработал для меня, поэтому я публикую решение, которое сработало для меня, надеюсь, что это поможет кому-то

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

оранжевый эффект подсветки-это стиль в ListView. в этой статье дает хороший обзор того, как переопределить стиль listView.

по сути, у вас есть селектор, который определяет различные элементы стиля на основе текущего состояния.

посмотреть этот короткий и быстрый решение https://stackoverflow.com/a/12242564/185022


С 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 класса. Он также отменяет белую границу между клетками.


добавьте это также в Ur XMl вместе с listselector..надеюсь, это сработает

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

если вы используете ArrayAdapter или BaseAdapter для заполнения элементов списка. Override на isEnabled метод и возвратить false.

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

после нескольких "google" и тестирования на виртуальных и реальных устройствах я замечаю, что мой код ниже работает:

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

обратите внимание, что я опустил areAllItemsEnabled() часть.


ничего не помогает мне, кроме этого:

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"

код

listView.setSelector(getResources().getDrawable(R.drawable.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>

для меня android:focusableInTouchMode="true" - Это путь. android:listSelector="@android:color/transparent" бесполезно. Обратите внимание, что я использую пользовательский listview с несколькими объектами в каждой строке.


вам нужно только добавить: android:cacheColorHint="@android:color/transparent"


в качестве альтернативы:

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

или

listView.setSelector(new StateListDrawable());

есть быстрый и простой способ сделать это: В методе:

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

надеюсь, это поможет;)


Если вы хотите отключить выделение для одного элемента представления списка,но сохранить ячейку включенной, установите цвет фона для этой ячейки, чтобы отключить выделение.

например, в вашем макете ячейки установите android:background="@color/white"


можно просто pos что вы получаете от onItemClick и вообще:

listView.setItemChecked(pos, false);

Это лучший способ, который я знаю