Kaip išsaugoti ir taikyti temos nustatymus Android programoje?
sobes.tech AI
Atsakymas iš AI
Norint išsaugoti ir taikyti temos nustatymus Android programoje, galima naudoti keletą būdų.
-
SharedPreferences: Paprastas būdas išsaugoti mažą duomenų kiekį, pvz., pasirinktą temos identifikatorių.// Temos išsaugojimas val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Temos skaitymas 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 // Temos taikymas Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Modernus ir asinchroninis būdas išsaugoti duomenis, siūlantis duomenų srautus ir patikimesnį saugojimą.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Temos išsaugojimas suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Temos gavimas 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 }Temos taikymas Activity gali įvykti po vertės gavimo iš
DataStore(pvz., naudojantcollectcoroutine'e) irsetThemeiškvietimo. Gali būti reikalinga Activity perkūrimas po temos pakeitimo, kad būtų teisingai rodomas vaizdas. -
Sisteminiai temos nustatymai: Android taip pat turi įmontuotą temų palaikymą: šviesią, tamsią ir numatytą (sekama sisteminėms nustatymams). Tai galima įgyvendinti per išteklius.
- Sukurti stilius šviesiai ir tamsiai temai (
res/values/themes.xmlirres/values-night/themes.xml). - Nustatyti
AppCompatDelegate.setDefaultNightModeprogramiškai arbaandroid:themeactivity manifeste perandroid:theme.
- Sukurti stilius šviesiai ir tamsiai temai (
Temos taikymas dažnai reikalauja Activity perkūrimo, kad išteklius būtų teisingai įkeliami. Tam galima naudoti recreate().