Hoe sla je thema-instellingen op en pas je ze toe in een Android-app?
sobes.tech AI
Antwoord van AI
Om de thema-instellingen op te slaan en toe te passen in een Android-app, kunnen verschillende benaderingen worden gebruikt.
-
SharedPreferences: Een eenvoudige manier om kleine hoeveelheden gegevens op te slaan, zoals de ID van het geselecteerde thema.// Thema opslaan val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Thema lezen 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 // Thema toepassen in Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Een modernere en asynchrone manier om gegevens op te slaan, die datastromen en betrouwbaarder opslag biedt.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Thema opslaan suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Thema ophalen 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 }Het toepassen van het thema in de Activity kan gebeuren nadat de waarde uit
DataStoreis verkregen (bijvoorbeeld metcollectin een coroutine) en doorsetThemeaan te roepen. Het kan nodig zijn om de Activity opnieuw te maken na het wijzigen van het thema, zodat de resources correct worden geladen. -
Systeeminstellingen voor het thema: Android biedt ook ingebouwde ondersteuning voor thema's: licht, donker en standaard (volgt de systeeminstellingen). Dit kan worden geïmplementeerd via resources.
- Maak stijlen voor lichte en donkere thema's (bijvoorbeeld
res/values/themes.xmlenres/values-night/themes.xml). - Stel
AppCompatDelegate.setDefaultNightModein om het thema programmatisch toe te passen of in de manifest van de activity viaandroid:theme.
- Maak stijlen voor lichte en donkere thema's (bijvoorbeeld
Het toepassen van een thema vereist vaak het opnieuw maken van de Activity, zodat de resources correct worden geladen. Hiervoor kan recreate() worden gebruikt.