Sobes.tech
Middle

Ako uložiť a použiť nastavenia motívu v aplikácii Android?

sobes.tech AI

Odpoveď od AI

Pre uloženie a použitie nastavení témy v Android aplikácii je možné použiť niekoľko prístupov.

  1. SharedPreferences: Jednoduchý spôsob na uloženie malého objemu dát, ako je identifikátor vybranej témy.

    // Uloženie témy
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
    with (sharedPref.edit()) {
        putInt(getString(R.string.saved_theme_key), themeId)
        apply()
    }
    
    // Čítanie témy
    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
    
    // Aplikovanie témy v Activity
    setTheme(savedThemeId)
    super.onCreate(savedInstanceState)
    
  2. DataStore: Modernejší a asynchrónny spôsob na uloženie dát, ktorý ponúka prúdy dát a spoľahlivejšie ukladanie.

    // DataStore
    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    
    // Uloženie témy
    suspend fun saveTheme(themeId: Int) {
        dataStore.edit { settings ->
            settings[intPreferencesKey("theme_id")] = themeId
        }
    }
    
    // Získanie témy
    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
        }
    

    Aplikovanie témy v Activity môže prebiehať po získaní hodnoty z DataStore (napríklad s použitím collect v korutíne) a volaní setTheme. Môže byť potrebné, aby sa Activity znovu vytvorila po zmene témy pre správne zobrazenie.

  3. Systémové nastavenia témy: Android tiež poskytuje vstavanú podporu tém: svetlá, tmavá a predvolená (nasleduje systémové nastavenia). To je možné implementovať cez zdroje.

    • Vytvorenie štýlov pre svetlú a tmavú tému (napríklad res/values/themes.xml a res/values-night/themes.xml).
    • Nastavenie AppCompatDelegate.setDefaultNightMode na použitie témy programovo alebo konfigurácia v manifeste activity cez android:theme.

Použitie témy často vyžaduje znovu vytvorenie Activity, aby boli zdroje správne načítané. Na to môžete použiť recreate().