Android
Tema DayNight (AppCompat v23.2 / API 14+)
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 directoriores/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 directoriores/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 devalues
yvalues-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.