Sobes.tech
Middle

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ų.

  1. 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)
    
  2. 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., naudojant collect coroutine'e) ir setTheme iškvietimo. Gali būti reikalinga Activity perkūrimas po temos pakeitimo, kad būtų teisingai rodomas vaizdas.

  3. 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.xml ir res/values-night/themes.xml).
    • Nustatyti AppCompatDelegate.setDefaultNightMode programiškai arba android:theme activity manifeste per android:theme.

Temos taikymas dažnai reikalauja Activity perkūrimo, kad išteklius būtų teisingai įkeliami. Tam galima naudoti recreate().