Hogyan mentjük és alkalmazzuk a téma beállításokat egy Android alkalmazásban?
sobes.tech MI
Válasz az MI-től
Az Android alkalmazásokban a téma beállításainak mentéséhez és alkalmazásához több megközelítés is létezik.
-
SharedPreferences: Egyszerű módszer a kis adatmennyiség, például a kiválasztott téma azonosítójának mentésére.// Téma mentése val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Téma olvasása 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éma alkalmazása az Activity-ben setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Egy modernebb és aszinkron módszer az adatok mentésére, amely adatfolyamokat és megbízhatóbb tárolást kínál.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Téma mentése suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Téma lekérdezése 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 }A téma alkalmazása az Activity-ben akkor történik, amikor a
DataStore-ból kapott értéket (példáulcollectsegítségével coroutine-ben) használva meghívjuk asetTheme-et. Lehet, hogy az Activity újraindítása szükséges a téma változtatása után, hogy a források helyesen töltődjenek be. -
Rendszerbeállítások a témához: Az Android beépített támogatást nyújt témákhoz: világos, sötét és alapértelmezett (a rendszerbeállításokat követi). Ez erőforrásokon keresztül valósítható meg.
- Hozzon létre stílusokat a világos és sötét témákhoz (például
res/values/themes.xmlésres/values-night/themes.xml). - Állítsa be az
AppCompatDelegate.setDefaultNightMode-ot, hogy programozottan alkalmazza a témát, vagy az activity manifestjében azandroid:theme-en keresztül.
- Hozzon létre stílusokat a világos és sötét témákhoz (például
A téma alkalmazása gyakran megköveteli az Activity újraindítását, hogy a források helyesen töltődjenek be. Ehhez használhatja a recreate()-et.