[JAVA] [Android] Comment gérer les thèmes sombres

introduction

Cette section décrit comment prendre en charge le thème sombre (mode sombre) qui est entièrement pris en charge à partir d'Android 10 du côté de l'application.

Création de ressources

res/values/styles.xml Tout d'abord, mettez à jour styles.xml, qui est également utilisé pour la personnalisation normale du thème, et définissez la couleur que vous souhaitez changer lorsque le mode sombre est activé / désactivé.

<resources>
    <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:colorBackground">@color/colorBackground</item>
        <item name="android:textColor">@color/textColor</item>
        <item name="android:textColorPrimary">@color/textColorPrimary</item>
        <item name="android:textColorSecondary">@color/textColorSecondary</item>
    </style>
</resources>

Création de colors.xml

Décrivez la définition de couleur référencée lorsque le mode sombre est activé dans les paramètres système dans res / values-night / colors.xml, et la couleur normale dans res / values / colors.xml.

Exemple) res / values-night / colors.xml

<resources>
    <color name="colorPrimary">#212121</color>
    <color name="colorPrimaryDark">#212121</color>
    <color name="colorAccent">#80cbc4</color>
    <color name="colorTransparent">#00000000</color>
    <color name="textColor">#FFFFFF</color>
    <color name="textColorPrimary">#FFFFFF</color>
    <color name="textColorSecondary">#808080</color>
    <color name="colorBackground">#313131</color>
    <color name="colorCardBackground">@color/colorPrimary</color>
    <color name="colorBackgroundBottomAppBar">#353535</color>
</resources>

Si vous prenez en charge jusqu'à ce point, l'affichage changera selon les paramètres du système sans écrire de code.

Si vous souhaitez basculer dynamiquement avec les paramètres intégrés à l'application

Utilisez AppCompatDelegate.setDefaultNightMode pour appliquer à l'ensemble de l'application.

Toujours affiché avec un thème sombre

AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); //S'applique à l'ensemble de l'application
AppCompatDelegate.setLocalNightMode(MODE_NIGHT_YES);   //S'applique uniquement à des activités spécifiques

Thème toujours sombre désactivé (affichage normal)

AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO); //S'applique à l'ensemble de l'application
AppCompatDelegate.setLocalNightMode(MODE_NIGHT_NO);  //S'applique uniquement à des activités spécifiques

Lié aux paramètres système (il s'agit de la valeur par défaut, sauf indication contraire)

AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); //S'applique à l'ensemble de l'application
AppCompatDelegate.setLocalNightMode(MODE_NIGHT_FOLLOW_SYSTEM);   //S'applique uniquement à des activités spécifiques

Recommended Posts

[Android] Comment gérer les thèmes sombres
Comment gérer les actifs de précompilation a échoué.
Android: Comment gérer "Impossible de déterminer la version Java à partir de '10 .0.1 '"
Programme de régime avec préprocesseur (comment gérer la taille i-appli)
Comment traiter Aucun modèle de demande interactive
[Environnement Docker] Comment gérer ActiveSupport :: MessageEncryptor :: InvalidMessage
Comment numéroter (nombre) avec html.erb
[Rails] Comment gérer les modifications d'URL après le rendu
Comment mettre à jour avec activerecord-import
Comment faire une capture d'écran avec l'émulateur Android Studio
Comment obtenir des valeurs en temps réel avec TextWatcher (Android)
Comment créer une application à l'aide de Tensorflow avec Android Studio
Comment gérer l'erreur ERREUR: lors de l'exécution de gem ... (Gem :: FilePermissionError)
Comment gérer Bundler :: Dsl :: DSLError en réécrivant gemfile
Comment se débarrasser des applications Android qui plantent avec l'erreur mystère RenderThread
Comment gérer différentes versions de rbenv et Ruby
Comment démarrer avec Slim
Comment "évider" une vue sur Android
Comment entourer n'importe quel caractère avec "~"
Comment utiliser mssql-tools avec Alpine
[Android] Comment créer un fragment de dialogue
Comment démarrer Camunda avec Docker
[Rails / RSpec] Comment traiter l'élément a une erreur de taille nulle
Project facet Java version 13 n'est pas pris en charge. Comment faire avec
Android: comment gérer "Cause: impossible de trouver android.support.transition.R $ id 2: android.support.transition.R $ id trouvé dans android / support / transition / R $ id 2. class"
Comment recadrer une image avec libGDX
Comment ajuster TextPosition avec l'extension de clavier iOS
Comment partager des fichiers avec Docker Toolbox
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
Comment utiliser BootStrap avec Play Framework
Comment détecter les conflits de microphone sur Android
Comment changer d'images miniatures avec JavaScript
[Note] Comment démarrer avec Rspec
Comment faire un contrôle basé sur l'API avec cancancan
Comment réaliser le téléchargement de fichiers avec Feign
Comment mettre à jour les modèles associés avec accepte_nested_attributes_for
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
Comment implémenter TextInputLayout avec la fonction de validation
Comment gérer les erreurs de connexion avec l'appareil
Comment supprimer des données avec une clé externe
Comment tester l'étendue privée avec JUnit
Comment surveiller nginx avec docker-compose avec datadog
Comment réaliser le téléchargement de fichiers avec Feign
Comment exécuter Blazor (C #) avec Docker
Comment créer un environnement Rails 6 avec Docker
Comment utiliser ExpandableListView dans Android Studio
Java8 / 9 Beginners: Streaming API addiction points et comment les gérer
Défi pour gérer les caractères déformés avec Java AudioSystem.getMixerInfo ()
L'histoire selon laquelle traiter d'anciennes dates est agaçante
[Java] Comment tester s'il est nul dans JUnit
Comment se moquer de chaque cas avec Mockito 1x
Comment se moquer de chaque cas avec PowerMock + Mockito1x