Android: deshabilitar resaltado en listView clic
android-listview highlighting (15)
Quiero desactivar el resaltado naranja que se produce al tocar una fila listView. Hasta ahora en mi xml he intentado lo siguiente:
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
Más información: quiero que haya una diferencia cero cuando un usuario toca la pantalla en este objeto listView.
Agrega esto a tu xml:
android:listSelector="@android:color/transparent"
Y para el problema, esto puede funcionar (no estoy seguro y no sé si hay mejores soluciones):
Puede aplicar un ColorStateList a su TextView.
Como alternativa:
listView.setSelector(android.R.color.transparent);
o
listView.setSelector(new StateListDrawable());
Desde ListView: Deshabilitar el resaltado de foco ,
Cuando configure su ListAdapter
use el siguiente código
ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c,
new String[] { "Name", "Score" }, to)
{
public boolean areAllItemsEnabled()
{
return false;
}
public boolean isEnabled(int position)
{
return false;
}
};
Esto anulará la clase BaseAdapter
. También cancela el borde blanco entre las células.
Después de algunos ''google'' y pruebas en dispositivos virtuales y reales, me doy cuenta de que funciona el siguiente código:
ArrayAdapter<String> myList = new ArrayAdapter<String>(this, R.layout.list_item, strText) {
public boolean isEnabled(int position)
{
return false;
}
};
Observe que he omitido la parte areAllItemsEnabled()
.
El efecto resaltado en naranja es un style en el ListView. Este artículo ofrece una buena visión general de cómo anular el estilo listView.
Esencialmente, tiene un selector que especifica diferentes elementos de estilo basados en el estado actual.
vea esto para una solución corta y rápida https://.com/a/12242564/185022
Hay una manera rápida y fácil de hacer esto: En método:
private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
//TODO
((ListView)sender).SelectedItem = null;
}
Espero que te ayude;)
La respuesta de RoflcoptrException debería hacer el truco, pero por alguna razón no funcionó para mí, así que estoy publicando la solución que funcionó para mí, espero que ayude a alguien.
<ListView
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
/>
Nada me ayuda mas esto:
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"
Para mí, android:focusableInTouchMode="true"
es el camino a seguir. android:listSelector="@android:color/transparent"
no sirve de nada. Tenga en cuenta que estoy usando una vista de lista personalizada con varios objetos en cada fila.
Si desea desactivar el resaltado para un solo elemento de vista de lista, pero mantener la celda habilitada, configure el color de fondo para que esa celda desactive el resalte.
Por ejemplo, en el diseño de su celda, configure android:background="@color/white"
Si está utilizando ArrayAdapter
o BaseAdapter
para rellenar los elementos de la lista. Override
el método isEnabled
y devuelva false
.
@Override
public boolean isEnabled (int position) {
return false;
}
Solo necesita agregar: android:cacheColorHint="@android:color/transparent"
agrega esto también a tu XMl junto con listselector ... espero que funcione
<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/>
en codigo
listView.setSelector(getResources().getDrawable(R.drawable.transparent));
y agregar una pequeña imagen transparente a la carpeta dibujable.
Me gusta: transparent.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00000000"/>
</shape>
solo puede obtener la pos
que obtiene de onItemClick
y hacer:
listView.setItemChecked(pos, false);
esa es la mejor manera que conozco