Comment enregistrer et appliquer les paramètres du thème dans une application Android?
sobes.tech IA
Réponse de l'IA
Pour sauvegarder et appliquer les paramètres du thème dans une application Android, plusieurs approches peuvent être utilisées.
-
SharedPreferences: Méthode simple pour sauvegarder une petite quantité de données, comme l'identifiant du thème sélectionné.// Sauvegarder le thème val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Lire le thème val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) val defaultValue = resources.getInteger(R.integer.default_theme_id) val savedThemeId = sharedPref?.getInt(getString(R.string.saved_theme_key), defaultValue) ?: defaultValue // Appliquer le thème dans l'Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Méthode plus moderne et asynchrone pour sauvegarder des données, offrant des flux de données et un stockage plus fiable.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Sauvegarder le thème suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Obtenir le thème val themeFlow: Flow<Int> = dataStore.data .catch { exception -> if (exception is IOException) { emit(emptyPreferences()) } else { throw exception } } .map { preferences -> preferences[intPreferencesKey("theme_id")] ?: R.style.Theme_App }L'application du thème dans l'Activity peut se faire après avoir obtenu la valeur de
DataStore(par exemple, en utilisantcollectdans une coroutine) et en appelantsetTheme. Il peut être nécessaire de recréer l'Activity après avoir changé le thème pour que les ressources soient correctement chargées. -
Paramètres système pour le thème : Android offre également un support intégré pour les thèmes : clair, sombre et par défaut (qui suit les paramètres du système). Cela peut être implémenté via des ressources.
- Créer des styles pour les thèmes clair et sombre (par exemple,
res/values/themes.xmletres/values-night/themes.xml). - Configurer
AppCompatDelegate.setDefaultNightModepour appliquer le thème de manière programmatique ou dans le manifeste de l'activité viaandroid:theme.
- Créer des styles pour les thèmes clair et sombre (par exemple,
L'application d'un thème nécessite souvent de recréer l'Activity pour que les ressources soient chargées correctement. Pour cela, on peut utiliser recreate().