studio sobre para mentor desarrollo crear con colección avanzado aula aplicaciones android android-theme

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án Theme .
  • 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