Android Aggiunta del tema DayNight a un'app


Esempio

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 directory res/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 directory res/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 in values e values-night directory values-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.