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.
-
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) -
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ímcollectv korutíne) a volanísetTheme. Môže byť potrebné, aby sa Activity znovu vytvorila po zmene témy pre správne zobrazenie. -
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.xmlares/values-night/themes.xml). - Nastavenie
AppCompatDelegate.setDefaultNightModena použitie témy programovo alebo konfigurácia v manifeste activity cezandroid:theme.
- Vytvorenie štýlov pre svetlú a tmavú tému (napríklad
Použitie témy často vyžaduje znovu vytvorenie Activity, aby boli zdroje správne načítané. Na to môžete použiť recreate().