Android: désactivation de la surbrillance sur le clic listView

Je veux désactiver la surbrillance orange qui se produit lorsque vous touchez une ligne listView. Jusqu'à présent, dans mon xml, j'ai essayé ce qui suit:

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

Plus d'informations: je veux qu'il y ait zéro différence lorsqu'un utilisateur touche l'écran sur cette liste d'objet.

285
demandé sur M.G 2010-05-25 22:20:38

15 réponses

Ajoutez ceci à votre xml:

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

Et pour le problème cela peut fonctionner (Je ne suis pas sûr et je ne sais pas s'il y a de meilleures solutions):

, Vous pouvez appliquer un ColorStateList à votre TextView.

645
répondu RoflcoptrException 2018-01-30 23:30:09

La réponse de RoflcoptrException devrait faire l'affaire, mais pour une raison quelconque, cela n'a pas fonctionné pour moi, donc je poste la solution qui a fonctionné pour moi, j'espère que cela aide quelqu'un

<ListView 
android:listSelector="@android:color/transparent" 
android:cacheColorHint="@android:color/transparent"
/>
185
répondu Mushtaq Jameel 2013-07-05 19:56:47

L'effet de surbrillance orange est un style sur la liste. Cet article donne un bon aperçu de la façon de remplacer la liste style.

Essentiellement, vous avez un sélecteur qui spécifie différents éléments de style en fonction de l'état actuel.

Voir ceci pour une solution courte et rapide https://stackoverflow.com/a/12242564/185022

101
répondu Cheryl Simon 2017-05-23 11:47:29

Depuis ListView: Désactiver La Mise Au Point En Surbrillance ,

Lorsque vous définissez votre ListAdapter utiliser le code suivant

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

Cela remplacera la classe BaseAdapter. Il annule également la bordure blanche entre les cellules.

60
répondu emdog4 2018-03-15 21:48:15

Ajoutez ceci aussi à ur XMl avec listselector..j'espère que cela fonctionnera

<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/> 
38
répondu sheetal 2016-02-10 15:54:31

Si vous utilisez ArrayAdapter ou BaseAdapter pour remplir les éléments de la liste. Override la méthode isEnabled et retourne false.

 @Override
  public boolean isEnabled (int position) {
    return false;
  }
31
répondu Libin 2014-08-12 13:24:06

Après quelques 'google' et tests sur des appareils virtuels et réels, je remarque que mon code ci-dessous fonctionne:

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

Notez que j'ai omis la partie areAllItemsEnabled().

13
répondu aerobrain 2012-02-09 07:26:46

Rien ne m'aide sauf ceci:

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
répondu Dmitry Chistyakov 2018-03-15 21:44:43

Dans le code

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

Et ajouter une petite image transparente au dossier drawable.

Comme: transparent.xml

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00000000"/>
</shape>
7
répondu Robert Bae Dong Hwan 2017-07-30 03:28:00

Pour moi android:focusableInTouchMode="true" est la voie à suivre. {[1] } ne sert à rien. Notez que j'utilise un listview personnalisé avec un certain nombre d'objets dans chaque ligne.

5
répondu erdomester 2012-03-21 19:31:22

Il vous suffit d'ajouter: android:cacheColorHint="@android:color/transparent"

5
répondu Prakash 2013-03-03 11:31:41

Comme alternative:

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

Ou

listView.setSelector(new StateListDrawable());
4
répondu Natali 2017-02-24 05:33:59

Il existe un moyen rapide et facile de le faire: Dans la méthode:

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

J'espère que ça va aider ;)

1
répondu FeldonDragon 2018-01-08 17:15:27

Si vous souhaitez désactiver la surbrillance d'un seul élément de vue de liste, mais que la cellule reste activée, définissez la couleur d'arrière-plan de cette cellule pour désactiver la surbrillance.

Par exemple, dans la disposition de votre cellule, définissez android:background="@color/white"

0
répondu GLee 2016-07-19 15:58:30

Vous pouvez simplement obtenir le {[1] } que vous obtenez du onItemClick et faire:

listView.setItemChecked(pos, false);

C'est la meilleure façon que je connaisse

0
répondu Chief Madog 2016-11-02 09:11:17