Android: wyłączanie podświetlenia na listView kliknij

Chcę wyłączyć pomarańczowe podświetlenie, które występuje podczas dotykania wiersza listView. Do tej pory w moim xml próbowałem następujące:

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

Więcej informacji: chcę, aby była zerowa różnica, gdy użytkownik dotknie ekranu tego obiektu listView.

Author: M.G, 2010-05-25

15 answers

Dodaj to do swojego xml:

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

A w przypadku problemu to może zadziałać (nie jestem pewien i nie wiem czy są lepsze rozwiązania):

Możesz zastosować ColorStateList do widoku tekstu.
 645
Author: RoflcoptrException,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 23:30:09

ODPOWIEDŹ RoflcoptrException powinna zadziałać, ale z jakiegoś powodu nie zadziałało dla mnie, więc zamieszczam rozwiązanie, które działało dla mnie, mam nadzieję, że komuś pomoże

<ListView 
android:listSelector="@android:color/transparent" 
android:cacheColorHint="@android:color/transparent"
/>
 185
Author: Mushtaq Jameel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-05 19:56:47

Efekt pomarańczowego podświetlenia to styl w widoku listy. Ten artykuł daje dobry przegląd sposobu nadpisania stylu listView.

Zasadniczo masz selektor, który określa różne elementy stylu na podstawie bieżącego stanu.

Zobacz to krótkie i szybkie rozwiązanie https://stackoverflow.com/a/12242564/185022

 101
Author: Cheryl Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29

From ListView: Disable Focus Highlight ,

Po ustawieniu ListAdapter Użyj następującego kodu

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

To nadpisze klasę BaseAdapter. Usuwa również białą granicę między komórkami.

 60
Author: emdog4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 21:48:15

Dodaj to również do ur XMl wraz z listselector..mam nadzieję, że to zadziała

<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/> 
 38
Author: sheetal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-10 15:54:31

Jeśli używasz ArrayAdapter lub BaseAdapter do wypełniania elementów listy. Override metoda isEnabled I return false.

 @Override
  public boolean isEnabled (int position) {
    return false;
  }
 31
Author: Libin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 13:24:06

Po kilku "google" i testach na wirtualnych i rzeczywistych urządzeniach, zauważyłem, że mój poniższy kod działa:

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

Zauważ, że pominąłem areAllItemsEnabled() część.

 13
Author: aerobrain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-09 07:26:46

Nic mi nie pomaga oprócz tego:

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"
 11
Author: Dmitry Chistyakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 21:44:43

W kodzie

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

I dodaj mały przezroczysty obraz do folderu drawable.

Jak: przezroczysty.xml

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00000000"/>
</shape>
 7
Author: Robert Bae Dong Hwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-30 03:28:00

Dla mnie android:focusableInTouchMode="true" jest droga do zrobienia. android:listSelector="@android:color/transparent" jest bezużyteczny. Zauważ, że używam niestandardowego widoku listy z liczbą obiektów w każdym wierszu.

 5
Author: erdomester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-21 19:31:22

Wystarczy dodać: android:cacheColorHint="@android:color/transparent"

 5
Author: Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-03 11:31:41

Jako alternatywa:

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

Lub

listView.setSelector(new StateListDrawable());
 4
Author: Natali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-24 05:33:59

Jest na to szybki i łatwy sposób: W metodzie:

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

Mam nadzieję, że to pomoże;)

 1
Author: FeldonDragon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 17:15:27

Jeśli chcesz wyłączyć podświetlanie dla pojedynczego elementu widoku listy, ale pozostaw komórkę włączoną, Ustaw kolor tła dla tej komórki, aby wyłączyć podświetlanie.

Na przykład w układzie komórki Ustaw android:background="@color/white"

 0
Author: GLee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-19 15:58:30

Możesz po prostu uzyskać pos, które otrzymujesz z onItemClick i do:

listView.setItemChecked(pos, false);

That ' s the best way i know of

 0
Author: Chief Madog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-02 09:11:17