Sobes.tech
Middle

Kuidas salvestada ja rakendada teema seadeid Android rakenduses?

sobes.tech AI

Vastus AI-lt

Selleks, et Android rakenduses salvestada jaotise seadeid jaotise kasutamise ja rakendamise, saab kasutada mitmeid lähenemisviise.

  1. SharedPreferences: Lihtne viis väikese andmekogumi, näiteks valitud teema identifikaatori, salvestamiseks.

    // Teema salvestamine
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
    with (sharedPref.edit()) {
        putInt(getString(R.string.saved_theme_key), themeId)
        apply()
    }
    
    // Teema lugemine
    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
    
    // Teema rakendamine Activitys
    setTheme(savedThemeId)
    super.onCreate(savedInstanceState)
    
  2. DataStore: Kaasaegsem ja asünkroonne viis andmete salvestamiseks, mis pakub andmevooge ja usaldusväärsemat salvestust.

    // DataStore
    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    
    // Teema salvestamine
    suspend fun saveTheme(themeId: Int) {
        dataStore.edit { settings ->
            settings[intPreferencesKey("theme_id")] = themeId
        }
    }
    
    // Teema saamine
    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
        }
    

    Teema rakendamine Activitys võib toimuda pärast väärtuse saamist DataStore-st (näiteks kasutades collect korutinas) ja setTheme väljakutset. Pärast teema muutmist võib olla vajalik Activity uuesti loomine, et ressursid õigesti laaditakse.

  3. Süsteemi seaded teema jaoks: Android pakub ka sisseehitatud tugi teemadele: hele, tume ja vaikimisi (järgib süsteemi seadeid). Seda saab rakendada ressursside kaudu.

    • Loo stiile hele- ja tummale teemale (res/values/themes.xml ja res/values-night/themes.xml).
    • Seadista AppCompatDelegate.setDefaultNightMode programmiliselt või konfiguratsiooni manifestis android:theme kaudu.

Teema rakendamine nõuab sageli Activity uuesti loomist, et ressursid õigesti laaditakse. Selleks saab kasutada recreate().