Comment enregistrer et utiliser les paramètres du thème dans une application Android?
sobes.tech IA
Réponse de l'IA
Une approche efficace inclut l'utilisation de SharedPreferences pour sauvegarder le thème sélectionné et AppCompatDelegate.setDefaultNightMode() pour l'appliquer.
-
Sauvegarder le thème : Utilisez
SharedPreferencespour stocker l'identifiant du thème choisi (par exemple, "light", "dark", "system").// Obtenir SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Obtenir l'éditeur val editor = sharedPrefs.edit() // Appliquer le thème avec ID themeId editor.putString("current_theme", themeId) // Enregistrer les modifications editor.apply() -
Appliquer le thème au démarrage : Dans la
Activityprincipale ou dans la classeApplication, lisez la valeur sauvegardée dansSharedPreferenceset appliquez le thème.// Lire la valeur sauvegardée du thème val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Par défaut 'system' // Appliquer le thème when (themeId) { "light" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) "dark" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) "system" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) } -
Changement de thème par l'utilisateur : Fournissez une interface utilisateur (par exemple,
RadioButtondans les paramètres), où l'utilisateur peut choisir un thème. Lors de la sélection, enregistrez le nouvel identifiant dansSharedPreferenceset appliquez immédiatement le thème en appelantAppCompatDelegate.setDefaultNightMode(), et si nécessaire, redémarrez l'Activitypour une application correcte du thème.// Supposons que l'utilisateur a choisi le thème sombre val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Appliquer le thème immédiatement AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Ou utiliser recreate() pour appliquer complètement le thème // recreate()
Redémarrer l'Activity avec recreate() peut être nécessaire pour que toutes les vues dans l'Activity actuelle soient correctement redessinées avec le nouveau thème.
-
Définition des thèmes dans
styles.xml: Définissez des styles pour les thèmes clair et sombre dansres/values/styles.xmletres/values-night/styles.xmlrespectivement, en héritant des thèmesTheme.AppCompat.<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Définitions de styles pour le thème clair --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Définitions de styles pour le thème sombre --> </style>
Dans le AndroidManifest.xml, indiquez le thème de base de l'application :
```xml
<!-- AndroidManifest.xml -->
<application
android:theme="@style/AppTheme.Light"
...>
<!-- ... Activities -->
</application>
```
-
Surveillance des changements de thème : En cas de changement de thème par le système (par exemple, selon l'horaire ou manuellement par l'utilisateur via les paramètres du téléphone), vous pouvez utiliser
Configuration.uiModedansonConfigurationChanged()pour réagir, maisAppCompatDelegategère généralement cela automatiquement lorsque vous utilisezMODE_NIGHT_FOLLOW_SYSTEM.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Vous pouvez vérifier le nouveau thème si nécessaire // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
L'utilisation de AppCompatDelegate est la méthode recommandée pour supporter les thèmes sur Android, car elle assure la compatibilité rétroactive et le bon fonctionnement avec différents composants de la bibliothèque de support.