Si está de humor forense, aquí le explicamos cómo investigar y averiguar qué está sucediendo.
android:background="?android:attr/activatedBackgroundIndicator"?
Intuitivamente, esto significa establecer el fondo en algún elemento de diseño.
Pero descompongamos esto aún más para ver cómo llegamos a nuestro misterioso dibujo.
Para ser precisos, significa "establecer el atributo de fondo a lo que se refiere el atributo" selectedBackgroundIndicator " en el tema actual .
Si entiende la parte de "se refiere al tema actual", básicamente ha entendido todo lo que sucede detrás de las portadas.
Básicamente , activeBackgroundIndicator no es un dibujable real sino una referencia a un dibujable . Entonces, ¿dónde está realmente definido el atributo "activeBackgroundIndictor "?
Está definido en su directorio sdk en un nombre de archivo attrs.xml . Por ejemplo:
ruta_a_android_sdk / plataformas / android-17 / data / res / values / attrs.xml
Si abre ese archivo, obtendrá la declaración de la siguiente manera:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml es donde declaras todos los atributos que luego usarás en tu vista xml. Tenga en cuenta que estamos declarando el atributo y su tipo y no asignando un valor aquí .
El valor real se asigna en themes.xml . Este archivo se encuentra en:
ruta_a_android_sdk / plataformas / android-17 / data / res / values / themes.xml
Si abre ese archivo, verá las múltiples definiciones según el tema que esté utilizando . Por ejemplo, aquí están las definiciones para el nombre de los temas Theme, Theme.Light, Theme.Holo, Theme.Holo.Light respectivamente:
<item name="activatedBackgroundIndicator">@android:drawable/activated_background</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_dark</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_light</item>
Ahora tenemos nuestros misteriosos dibujables. Si elige el primero, se define en la carpeta dibujable en:
ruta_a_android_sdk / plataformas / android-17 / data / res / drawable / selected_background.xml
Si abre ese archivo, verá la definición del dibujable, lo cual es importante para comprender lo que está sucediendo.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
<item android:drawable="@color/transparent" />
</selector>
Aquí estamos definiendo un elemento de diseño con dos estados: el estado predeterminado es simplemente fondo transparente y si el estado es "state_activated", nuestro elemento de diseño es "list_selector_background_selected".
consulte este enlace para obtener información general sobre los elementos de diseño y los estados.
"list_selector_background_selected" es un archivo png de 9 parches que se encuentra en la carpeta drawable-hdpi.
Ahora puede ver por qué definimosactiveBackgroundIndicator como referencia en lugar de vincularlo directamente al archivo dibujable; le permite elegir el dibujable correcto según su tema.