web-dev-qa-db-fra.com

Android: désactivation de la surbrillance sur un 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 souhaite qu'il n'y ait aucune différence lorsqu'un utilisateur touche l'écran de cet objet listView.

287
John Moffitt

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 existe de meilleures solutions):

Vous pouvez appliquer un ColorStateList à votre TextView.

653

La réponse de RoflcoptrException devrait faire l'affaire, mais pour une raison quelconque, cela n'a pas fonctionné pour moi. Je publie donc la solution qui a fonctionné pour moi. J'espère que cela aidera quelqu'un

<ListView 
Android:listSelector="@Android:color/transparent" 
Android:cacheColorHint="@Android:color/transparent"
/>
187
Mushtaq Jameel

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

Pour l'essentiel, vous disposez d'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
Cheryl Simon

De ListView: désactiver le surlignage de focus ,

lorsque vous définissez votre ListAdapter, utilisez 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.

62
emdog4

ajoutez également ceci à votre XMl avec listselector..hope

<ListView
Android:cacheColorHint="@Android:color/transparent"
Android:listSelector="@Android:color/transparent"/> 
38
sheetal

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

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

Après quelques recherches sur Google et des tests sur des appareils virtuels et réels, je constate 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; 
    } 
};

remarquez que j'ai omis la portion areAllItemsEnabled().

13
aerobrain

Rien ne m'aide que 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

dans du code

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

et ajoutez une petite image transparente à un dossier pouvant être dessiné. 

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

Vous devez seulement ajouter: Android:cacheColorHint="@Android:color/transparent"

5
Prakash

Pour moi, Android:focusableInTouchMode="true" est la voie à suivre. Android:listSelector="@Android:color/transparent" est inutile. Notez que j'utilise une liste personnalisée avec un nombre d'objets dans chaque ligne.

5
erdomester

Comme alternative:

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

ou

listView.setSelector(new StateListDrawable());
4
Natali

Il y a moyen rapide et facile de faire ceci: En méthode:

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

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

1
FeldonDragon

vous pouvez simplement obtenir la pos que vous obtenez de la onItemClick.__ et faire:

listView.setItemChecked(pos, false);

c'est la meilleure façon que je connaisse 

0
Chief Madog

Si vous souhaitez désactiver la surbrillance d'un élément d'affichage de liste unique tout en maintenant la cellule activée, définissez la couleur d'arrière-plan de cette cellule pour désactiver la surbrillance.

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

0
GLee