sobre - manual android studio avanzado
¿Cómo usar el tema predeterminado del dispositivo para la aplicación? (2)
Tengo una aplicación que quiero desarrollar para Android 2.1, 2.2, 2.3.3, 3.0 / 3.1 y 4.0.x. Entre esos niveles de API, hay alrededor de 3 tipos diferentes de Temas. El último tema 4.0.x es Holo.
De todos modos, quiero que mi aplicación use el tema predeterminado de Android para cualquier dispositivo en el que esté. Si está en un dispositivo 4.0.x, quiero que use Holo. Si está en 2.3.3, quiero que use el tema de esa versión de Android. etc ...
¿Hay una manera simple de abordar esto? Me di cuenta de que con 4.0, agregaron un tema Theme.DeviceDefault
que puede usar, pero esto no me ayuda para los niveles anteriores de API. ¿Cuál es el mejor enfoque para esto?
Actualmente hay hasta 3, a veces 4 Temas disponibles para dispositivos Android (variaciones de .Light
y similares no incluidos)
Theme
el valor predeterminado para las versiones más antiguas de Android hasta 2.3 Gingerbread (10), incluidos algunos cambios menores de estilo en esas versiones
Theme.Holo
introducido con Android 3.0 Honeycomb (11)
Theme.Material
nuevo en Android 5.0 Lollipop (21)
Theme.DeviceDefault
(Podría ser cualquier cosa)
presentado con 4.0 Ice Cream Sandwich (14), un tema que puede ser personalizado por el fabricante del dispositivo. Representa el aspecto nativo del dispositivo, es decir, Holo o Material en dispositivos Nexus (y en el editor de diseño de Android Studio), tal vez algo personalizado en otros dispositivos. En caso de que "algo personalizado" no sea una opción, esos dispositivos deben venir con los temas de stock. Sin embargo, las aplicaciones que quieren el tema de stock deben especificarlo.
¿Cuál es el mejor enfoque para esto?
Sin tema + targetSdkVersion> = 14
La opción más simple, pero no necesariamente la mejor, es definir ningún tema en absoluto. Android seleccionará el predeterminado para usted. Pero Android no quiere sorprender a su aplicación con temas que no espera, por lo que vuelve al tema para el que probablemente haya diseñado su aplicación. Lo hace al mirar el android:targetSdkVersion
dentro de AndroidManifest.xml
(que ahora se puede establecer a través de gradle).
- Las aplicaciones que se dirigen a plataformas antiguas, que solo tenían
Theme
(es decir, niveles de API 3-10), solo recibiránTheme
. - Las aplicaciones que apuntan a 11-13 obtienen
Theme.Holo
. - 14 o superior recibirá
Theme.DeviceDefault
.
Como esto es solo por compatibilidad con versiones anteriores, no obtendrás Theme.Material
en tu viejo teléfono Gingerbread. Por lo tanto, ningún tema + objetivo 14+ = dispositivo predeterminado.
Especificando diferentes temas
El sistema de superposición de recursos de Android permite especificar estilos según el nivel de la API del dispositivo. Por ejemplo, diferentes versiones de un estilo en res/values-v11
y res/values-v21
. Esto también es lo que las aplicaciones creadas recientemente a través de Android Studio configurarán para usted.
Como ejemplo, la configuración más básica para una aplicación .Light
temas se ve así:
/res/values/styles.xml
se aplica a todos los dispositivos y sirve como base
<resources>
<style name="AppTheme" parent="android:Theme.Light"/>
</resources>
/res/values-v11/styles.xml
se carga en todos los dispositivos que tienen API de nivel 11 y superior (incluidos los que tienen 21 o más). Pero solo se usa la versión más reciente de "AppTheme".
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light"/>
</resources>
/res/values-v21/styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light"/>
</resources>
Nota: la especificación alternativa de Theme.DeviceDefault
en /res/values-v14/styles.xml
debería ser suficiente para tener un aspecto predeterminado, pero eso no permite ajustar el diseño. No está de más agregar la anulación de v14. DeviceDefault y Holo podrían ser diferentes después de todo.
AndroidManifest.xml
es el lugar donde se usa el tema personalizado. Por ejemplo, como predeterminado de la aplicación:
...
<application
android:theme="@style/AppTheme"
...
Enlaces a la documentación oficial
Seleccione un tema basado en la versión de plataforma : documento oficial para definir diferentes estilos a través de configuraciones de recursos
Holo Everywhere - publicación de blog que explica el mecanismo predeterminado y el tema DeviceDefault / Holo
Uso del tema material - documentación del material
Puede declarar un tema en sus valores / styles.xml y luego en sus valores-v11 / styles.xml anularlo con la versión Holo:
values / styles.xml:
<style name="DialogTheme" parent="@android:style/Theme.Dialog"></style>
values-v11 / styles.xml:
<style name="DialogTheme" parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar"></style>
Hazlo de esa manera, y tendrás temas Holo en dispositivos API 11+ y temas regulares en los demás.
Saludos Steffen Vangsgaard