Android Ajout du thème DayNight à une application


Exemple

Le thème DayNight permet à une application de changer de schéma de couleurs en fonction de l'heure et du dernier emplacement connu de l'appareil.

Ajoutez ce qui suit à votre 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>

Les thèmes à partir desquels vous pouvez ajouter une fonctionnalité de changement de thème de nuit sont les suivants:

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

Outre colorPrimary , colorPrimaryDark et colorAccent , vous pouvez également ajouter d'autres couleurs que vous souhaitez changer, par exemple textColorPrimary ou textColorSecondary . Vous pouvez également ajouter les couleurs personnalisées de votre application à ce style .

Pour que le changement de thème fonctionne, vous devez définir un colors.xml par défaut dans le répertoire res/values et un colors.xml dans le colors.xml res/values-night et définir les couleurs jour / nuit de manière appropriée.

Pour changer de thème, appelez la AppCompatDelegate.setDefaultNightMode(int) partir de votre code Java. (Cela changera la palette de couleurs pour l’application entière, et pas seulement pour une activité ou un fragment.) Par exemple:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

Vous pouvez passer l'un des trois suivants selon votre choix:

  • AppCompatDelegate.MODE_NIGHT_NO : cela définit le thème par défaut pour votre application et prend les couleurs définies dans le répertoire res/values . Il est recommandé d'utiliser des couleurs claires pour ce thème.
  • AppCompatDelegate.MODE_NIGHT_YES : définit un thème de nuit pour votre application et prend les couleurs définies dans le répertoire res/values-night . Il est recommandé d'utiliser des couleurs sombres pour ce thème.
  • AppCompatDelegate.MODE_NIGHT_AUTO : cette AppCompatDelegate.MODE_NIGHT_AUTO change automatiquement les couleurs de l'application en fonction de l'heure du jour et des couleurs que vous avez définies dans values-night répertoires de values et de values-night .

Il est également possible d’obtenir le statut actuel du mode nuit à l’aide de la méthode getDefaultNightMode() . Par exemple:

int modeType = AppCompatDelegate.getDefaultNightMode();

Veuillez noter, cependant, que le changement de thème ne persistera pas si vous tuez l'application et la rouvrez. Si vous faites cela, le thème reviendra à AppCompatDelegate.MODE_NIGHT_AUTO , qui est la valeur par défaut. Si vous souhaitez que le changement de thème persiste, assurez-vous de stocker la valeur dans les préférences partagées et de charger la valeur stockée à chaque ouverture de l'application après sa destruction.