Tengo un ImageView que tiene un conjunto de recursos de imagen dibujable en un selector. ¿Cómo accedo programáticamente al selector y cambio las imágenes del estado resaltado y no resaltado?
Aquí hay un código de selector:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iconSelector">
<!-- pressed -->
<item android:state_pressed="true" android:drawable="@drawable/btn_icon_hl" />
<!-- focused -->
<item android:state_focused="true" android:drawable="@drawable/btn_icon_hl" />
<!-- default -->
<item android:drawable="@drawable/btn_icon" />
</selector>
Quiero poder reemplazar btn_icon_hl
y btn_icon
con otras imágenes.
Respuestas:
Por lo que he podido encontrar (he intentado hacer algo similar yo mismo), no hay forma de modificar un solo estado después de que StateListDrawable ya se haya definido. Sin embargo, puede definir uno NUEVO a través del código:
Y puede tener dos de ellos a mano o crear uno diferente según lo necesite.
fuente
Tuve el mismo problema y di un paso más para solucionarlo. Sin embargo, el único problema es que no puede especificar NavStateListDrawable en xml, por lo que debe establecer el fondo de su elemento de interfaz de usuario a través del código. El método onStateChange debe anularse para asegurarse de que cada vez que se cambia el nivel del elemento de dibujo principal, también se actualiza el nivel de la lista de niveles secundarios.
Al construir NavStateListDrawable, debe pasar el nivel del icono que desea mostrar.
Para todos los diferentes estados de diseño del botón de navegación, tengo algo como lo siguiente.
Iba a publicar esto como una pregunta y una respuesta, pero como has hecho la misma pregunta, aquí tienes. Tenga en cuenta que esto le ahorra una gran cantidad de definiciones de archivos xml. Bajé de aproximadamente 50-100 definiciones xml a aproximadamente 4.
fuente