studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android xml android-ui android-theme

programacion - ¿Tema de Android XML que hereda de dos temas principales?



manual de programacion android pdf (1)

Me he estado preguntando sobre esto también, así que escribí una aplicación de prueba simple para probarlo. El archivo de recursos se ve así:

<!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style> <style name="AppTheme.TestTheme" parent="android:Theme.Light"> </style>

Entonces aplico AppTheme.TestTheme a la actividad en el archivo de manifiesto. AppTheme hace que la ventana esté en pantalla completa y no tenga una barra de título. Theme.Light hace que el fondo de la ventana se ilumine en lugar del fondo oscuro predeterminado. Cuando se especifica el atributo parent="android:Theme.Light" , la ventana es blanca y no a pantalla completa, esto significa que el atributo parent="..." tiene prioridad sobre el prefijo del nombre, y la jerarquía parece ser TestTheme <- Theme.Light (light) <- Theme (dark) .

Con parent = "android: Theme.Light" eliminado, la pantalla es oscura y pantalla completa, por lo que la TestTheme <- AppTheme (fullscreen) <- AppBaseTheme <- Theme (dark) está en su lugar.

Cuando se especifica parent="..." , no hay diferencia cuando elimino el prefijo o no. Entonces parent="..." parece tener definitivamente precedencia. AppTheme.TestTheme no hereda de ambos padres a la vez.

Ahora, al mirar el themes.xml predeterminado, parece que Theme.Holo.Light hereda de Theme.Light, y luego todas las cosas Holo se especifican manualmente en su descripción. Así que lo llamaron Theme.Holo.Light no porque hereda de Holo, sino porque querían un nombre que lo describiera como "la versión ligera de Holo". Y porque querían ser $ @ &! Ing confusos.

Esto fue probado en Gingerbread 2.3.3.

Los estilos y temas de Android siempre me dan vueltas. Quería usar la interfaz de usuario de Holo en diferentes versiones de Android para mi aplicación. Así que decidí extraer los recursos necesarios navegando por la fuente.

Me encontré con lo siguiente en android-15/data/res/values/themes.xml y estoy confundido en cuanto a qué es exactamente ''heredado'' y de dónde:

<style name="Theme.Holo.Light" parent="Theme.Light"> ... ... </style>

La Guía API de Android dice:

Si desea heredar de los estilos que ha definido usted mismo, no tiene que usar el atributo parent . En su lugar, simplemente prefija el nombre del estilo que desea heredar al nombre de su nuevo estilo, separado por un punto.

Pero desde el código anterior, parece que Theme.Holo.Light hereda de Theme.Holo y de Theme.Light .

¿Cómo funciona eso o qué no estoy leyendo correctamente?