Me he estado preguntando sobre esto también, así que escribí una aplicación de prueba simple para probarlo. 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>
Así que se aplican AppTheme.TestTheme a la actividad en el archivo de manifiesto. AppTheme hace que la ventana de pantalla completa & 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 jerarquía TestTheme <- AppTheme (fullscreen) <- AppBaseTheme <- Theme (dark)
está en su lugar.
Cuando se especifica parent="..."
, no hace ninguna diferencia cuando elimino el prefijo o no. Así que parent="..."
parece tomar definitivamente la 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 de 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 confuso.
Esto se probó en Gingerbread 2.3.3.
Esto fue realmente útil. ¡Gracias! –
Dos años de edad, pero aún así me ayudaron. Esto realmente debería ir a algún lugar en los documentos de diseño oficial. – jenzz
Interesante .. No funciona para mí: Android Studio 2.3.3 Build # AI-162.4069837, construido el 6 de junio, 2017 JRE: 1.8.0_112-release-B06 x86_64 JVM: OpenJDK servidor de 64 bits VM por JetBrains sro – Maciej