Buscar..


Adición del tema DayNight a una aplicación

El tema DayNight le da a una aplicación la genial capacidad de cambiar los esquemas de color según la hora del día y la última ubicación conocida del dispositivo.

Agregue lo siguiente a su styles.xml :

<style name="AppTheme" parent="Theme.AppCompat.DayNight">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
</style>

Los temas que puede ampliar para agregar la capacidad de cambio de tema de día por la noche son los siguientes:

  • "Theme.AppCompat.DayNight"
  • "Theme.AppCompat.DayNight.NoActionBar"
  • "Theme.AppCompat.DayNight.DarkActionBar"

Además de colorPrimary , colorPrimaryDark y colorAccent , también puede agregar cualquier otro color que desee cambiar, por ejemplo, textColorPrimary o textColorSecondary . También puede agregar los colores personalizados de su aplicación a este style .

Para que el cambio de tema funcione, debe definir un colors.xml predeterminado en el directorio res/values y otro colors.xml en el directorio res/values-night y definir adecuadamente los colores día / noche.

Para cambiar el tema, llame al AppCompatDelegate.setDefaultNightMode(int) desde su código Java. (Esto cambiará el esquema de color para toda la aplicación, no solo una actividad o fragmento). Por ejemplo:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

Puede pasar cualquiera de los siguientes tres de acuerdo a su elección:

  • AppCompatDelegate.MODE_NIGHT_NO : esto establece el tema predeterminado para su aplicación y toma los colores definidos en el directorio res/values . Se recomienda utilizar colores claros para este tema.
  • AppCompatDelegate.MODE_NIGHT_YES : establece un tema nocturno para su aplicación y toma los colores definidos en el directorio res/values-night . Se recomienda utilizar colores oscuros para este tema.
  • AppCompatDelegate.MODE_NIGHT_AUTO : este cambia automáticamente los colores de la aplicación según la hora del día y los colores que haya definido en los directorios de values y values-night .

También es posible obtener el estado actual del modo nocturno utilizando el método getDefaultNightMode() . Por ejemplo:

int modeType = AppCompatDelegate.getDefaultNightMode();

Sin embargo, tenga en cuenta que el cambio de tema no persistirá si mata la aplicación y la vuelve a abrir. Si lo hace, el tema volverá a AppCompatDelegate.MODE_NIGHT_AUTO , que es el valor predeterminado. Si desea que el cambio de tema persista, asegúrese de almacenar el valor en las preferencias compartidas y de cargar el valor almacenado cada vez que se abra la aplicación después de que se haya destruido.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow