Kā saglabāt un piemērot tēmas iestatījumus Android lietotnē?
sobes.tech AI
Atbilde no AI
Lai saglabātu un piemērotu tēmas iestatījumus Android lietotnē, var izmantot vairākus pieejas.
-
SharedPreferences: Vienkāršs veids, kā saglabāt nelielu datu apjomu, piemēram, izvēlētās tēmas identifikatoru.// Tēmas saglabāšana val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Tēmas lasīšana 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 // Tēmas piemērošana Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Modernāks un asīnhronais veids datu saglabāšanai, kas piedāvā datu plūsmas un drošāku glabāšanu.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Tēmas saglabāšana suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Tēmas iegūšana 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 }Tēmas piemērošana Activity var notikt pēc vērtības iegūšanas no
DataStore(piemēram, izmantojotcollectkorutīnā) unsetThemeizsaukšanas. Var būt nepieciešams atkārtoti izveidot Activity pēc tēmas maiņas, lai pareizi attēlotu. -
Sistēmas iestatījumi tēmai: Android arī nodrošina iebūvētu tēmu atbalstu: gaišo, tumšo un noklusējuma (seko sistēmas iestatījumiem). To var īstenot ar resursiem.
- Izveidot stilus gaišai un tumšai tēmai (
res/values/themes.xmlunres/values-night/themes.xml). - Iestatīt
AppCompatDelegate.setDefaultNightModeprogrammatiski vai konfigurēt manifestā arandroid:theme.
- Izveidot stilus gaišai un tumšai tēmai (
Tēmas piemērošana bieži prasa atkārtotu Activity izveidi, lai resursi tiktu pareizi ielādēti. To var izdarīt ar recreate().