Come salvare e applicare le impostazioni del tema in un'app Android?
sobes.tech AI
Risposta dell'AI
Per salvare e applicare le impostazioni del tema in un'app Android, si possono usare diversi approcci.
-
SharedPreferences: Metodo semplice per salvare piccole quantità di dati, come l'identificatore del tema selezionato.// Salvataggio del tema val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Lettura del tema 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 // Applicare il tema in Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Metodo più moderno e asincrono per salvare dati, che offre flussi di dati e uno storage più affidabile.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Salvataggio del tema suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Lettura del tema 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'applicazione del tema in Activity può avvenire dopo aver ottenuto il valore da
DataStore(ad esempio, usandocollectin una coroutine) e chiamandosetTheme. Potrebbe essere necessario ricreare l'Activity dopo aver cambiato il tema per il corretto caricamento delle risorse. -
Impostazioni di sistema per il tema: Android offre anche il supporto integrato per i temi: chiaro, scuro e predefinito (segue le impostazioni di sistema). Questo può essere implementato tramite risorse.
- Creare stili per i temi chiaro e scuro (ad esempio,
res/values/themes.xmleres/values-night/themes.xml). - Configurare
AppCompatDelegate.setDefaultNightModeper applicare il tema programmaticamente o nel manifesto dell'activity tramiteandroid:theme.
- Creare stili per i temi chiaro e scuro (ad esempio,
L'applicazione di un tema spesso richiede di ricreare l'Activity affinché le risorse siano caricate correttamente. Per farlo, si può usare recreate().