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.
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.
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"
/>
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
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.
Ajoutez ceci aussi à ur XMl avec listselector..j'espère que cela fonctionnera
<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/>
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;
}
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()
.
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"
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>
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.
Il vous suffit d'ajouter:
android:cacheColorHint="@android:color/transparent"
Comme alternative:
listView.setSelector(android.R.color.transparent);
Ou
listView.setSelector(new StateListDrawable());
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 ;)
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"
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