Android: setselector color para listview no funciona
Tengo una actividad listview en la que establezco el color del selector con el siguiente código. Pero cuando selecciono un elemento, toda la lista se destaca con el color del selector, que no quiero. ¿Dónde estoy haciendo mal? Cualquier ayuda es apreciada.
ListView lv = getListView(); lv.setFocusableInTouchMode(true); lv.setBackgroundColor(Color.WHITE); lv.setSelector(R.color.blue);
- ¿Puedo usar Pull para actualizar sin utilizar ScrollView / ListView?
- Cómo obtener el valor de un elemento Listview que se hace clic en android?
- Android EditText dentro de ListView?
- Centralización de diseño de Android en RelativeLayout para ListView personalizado
- Lista de elementos con esquinas redondeadas
- Listview, abra una nueva actividad onClick
- Android listview mostrar todos los elementos disponibles sin desplazamiento con el encabezado estático
- Android ListView Color del texto
- Cómo agregar un elemento secundario en Android ListView?
- Android: ¿qué hace el método "setTextFilterEnabled"?
- Obtener lista de cuentas en android
- Encuadernación onScrolling escucha al android ListView
- ¿Cómo puedo deshabilitar ListView overscrolling en Android 2.2?
Utilice esta forma para utilizar Selector
Cree un xml en res/drawable
y defina el color para el estado del evento diferente
Entonces este xml como selector
Por ejemplo, res/drawable/selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/gray" /> </selector>
A continuación, declarar gris en your res\values\colors.xml
<color name="gray">#808080</color>
A continuación, ajuste el selector como
lv.setSelector( R.drawable.selector);
Gracias por tu ejemplo, funcionó mejor para mí de esta manera … Intenta esto en su lugar. Cree un xml en res/drawable
y defina el color para el estado del evento diferente
Entonces este xml como selector
Por ejemplo, res/drawable/selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/gray" /> </selector>
A continuación, declarar gris en su res\values\strings.xml
<color name="gray">#808080</color>
A continuación, ajuste el selector como
lv.setSelector( R.drawable.selector); lv.setDrawSelectorOnTop(true); // if you have background Drawable on your listView
No es necesario hacer res / drawable / selector.xml.
Simplemente agregue estas líneas en su método onCreate:
StateListDrawable selector = new StateListDrawable(); selector.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(R.color.pressed_state_color)); selector.addState(new int[]{-android.R.attr.state_pressed}, new ColorDrawable(R.color.normal_state_color)); lv.setSelector(selector);
Lo siento, no tengo suficiente reputación para agregar comentarios a las respuestas anteriores.
Debes establecer
android:state_selected = "true"
a
android:state_selected = "false"
Las respuestas aquí no funcionan para las vistas personalizadas en ListView debido a un fondo no válido. La solución es establecer el fondo de cada elemento en android:background="?android:attr/activatedBackgroundIndicator"
. He aquí un ejemplo:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="?android:attr/activatedBackgroundIndicator"> <!-- your item content--> </LinearLayout>
Después de eso, StateListDrawable funciona como se esperaba.
Fuente: http://www.michenux.net/android-listview-highlight-selected-item-387.html ,
- Mantenga el mapa centrado, independientemente de dónde pinche el zoom en android
- Uso de la barra de acción de soporte de inicio activada