Cum se salvează și se aplică setările de temă într-o aplicație Android?
sobes.tech AI
Răspuns de la AI
Pentru a salva și aplica setările temei într-o aplicație Android, se pot folosi mai multe abordări.
-
SharedPreferences: O metodă simplă pentru a salva o cantitate mică de date, cum ar fi identificatorul temei selectate.// Salvarea temei val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Citirea temei 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 // Aplicarea temei în Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: O metodă mai modernă și asincronă pentru salvarea datelor, care oferă fluxuri de date și o stocare mai fiabilă.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Salvarea temei suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Obținerea temei 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 }Aplicarea temei în Activity poate avea loc după obținerea valorii din
DataStore(de exemplu, folosindcollectîntr-o coroutine) și apelândsetTheme. Este posibil să fie necesară recrearea Activity-ului după schimbarea temei pentru a se încărca corect resursele. -
Setările sistemului pentru temă: Android oferă, de asemenea, suport încorporat pentru teme: luminoasă, întunecată și implicită (urmând setările sistemului). Acest lucru poate fi implementat prin resurse.
- Crearea stilurilor pentru tema luminoasă și întunecată (de exemplu,
res/values/themes.xmlșires/values-night/themes.xml). - Setarea
AppCompatDelegate.setDefaultNightModepentru a aplica tema programatic sau în manifestul activity-ului prinandroid:theme.
- Crearea stilurilor pentru tema luminoasă și întunecată (de exemplu,
Aplicarea unei teme necesită adesea recrearea Activity-ului pentru ca resursele să fie încărcate corect. Pentru aceasta, se poate folosi recreate().