Android
Tema DayNight (AppCompat v23.2 / API 14+)
Ricerca…
Aggiunta del tema DayNight a un'app
Il tema DayNight offre a un'app la capacità di cambiare schemi di colori in base all'ora del giorno e all'ultima posizione nota del dispositivo.
Aggiungi quanto segue al tuo 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>
I temi che puoi estendere da aggiungere alla funzionalità di commutazione del tema giorno notte sono i seguenti:
-
"Theme.AppCompat.DayNight"
-
"Theme.AppCompat.DayNight.NoActionBar"
-
"Theme.AppCompat.DayNight.DarkActionBar"
Oltre a colorPrimary
, colorPrimaryDark
e colorAccent
, puoi anche aggiungere qualsiasi altro colore che vorresti cambiare, ad esempio textColorPrimary
o textColorSecondary
. Puoi anche aggiungere i colori personalizzati della tua app a questo style
.
Per il passaggio da un tema all'altro, è necessario definire un colors.xml
predefinito nella directory res/values
e un altro colors.xml
nella colors.xml
res/values-night
e definire i colori giorno / notte in modo appropriato.
Per cambiare tema, chiama il AppCompatDelegate.setDefaultNightMode(int)
dal tuo codice Java. (Questo cambierà lo schema dei colori per l'intera app, non solo una qualsiasi attività o frammento.) Ad esempio:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
Puoi passare uno dei seguenti tre in base alla tua scelta:
-
AppCompatDelegate.MODE_NIGHT_NO
: imposta il tema predefinito per la tua app e prende i colori definiti nella directoryres/values
. Si consiglia di utilizzare colori chiari per questo tema. -
AppCompatDelegate.MODE_NIGHT_YES
: imposta un tema notturno per la tua app e prende i colori definiti nella directoryres/values-night
. Si consiglia di utilizzare i colori scuri per questo tema. -
AppCompatDelegate.MODE_NIGHT_AUTO
: questo cambia automaticamente i colori dell'app in base all'ora del giorno e ai colori definiti invalues
evalues-night
directoryvalues-night
.
È anche possibile ottenere lo stato attuale della modalità notte utilizzando il metodo getDefaultNightMode()
. Per esempio:
int modeType = AppCompatDelegate.getDefaultNightMode();
Si noti, tuttavia, che l'interruttore del tema non persisterà se si uccide l'app e la si riapre. Se lo fai, il tema ritorna a AppCompatDelegate.MODE_NIGHT_AUTO
, che è il valore predefinito. Se vuoi che il tema rimanga permanente, assicurati di memorizzare il valore nelle preferenze condivise e carica il valore memorizzato ogni volta che l'app viene aperta dopo che è stata distrutta.