Sobes.tech
Middle

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.

  1. 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)
    
  2. 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, izmantojot collect korutīnā) un setTheme izsaukšanas. Var būt nepieciešams atkārtoti izveidot Activity pēc tēmas maiņas, lai pareizi attēlotu.

  3. 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.xml un res/values-night/themes.xml).
    • Iestatīt AppCompatDelegate.setDefaultNightMode programmatiski vai konfigurēt manifestā ar android:theme.

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().