Wie speichert und wendet man die Theme-Einstellungen in einer Android-App an?
sobes.tech KI
Antwort von AI
Um die Theme-Einstellungen in einer Android-Anwendung zu speichern und anzuwenden, können verschiedene Ansätze verwendet werden.
-
SharedPreferences: Ein einfacher Weg, um kleine Datenmengen wie die ID des gewählten Themas zu speichern.// Thema speichern val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Thema lesen 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 in der Activity anwenden setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Ein moderner und asynchroner Weg, Daten zu speichern, der Datenströme und eine zuverlässigere Speicherung bietet.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Thema speichern suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Thema abrufen 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 }Die Anwendung des Themas in der Activity kann nach dem Erhalt des Wertes aus
DataStoreerfolgen (z.B. mitcollectin einer Coroutine) und durch Aufruf vonsetTheme. Es kann notwendig sein, die Activity neu zu erstellen, um das korrekte Laden der Ressourcen sicherzustellen. -
Systemeinstellungen für das Thema: Android bietet auch eine integrierte Unterstützung für Themen: hell, dunkel und Standard (folgt den Systemeinstellungen). Dies kann durch Ressourcen umgesetzt werden.
- Erstellen von Styles für helle und dunkle Themen (z.B.
res/values/themes.xmlundres/values-night/themes.xml). - Konfigurieren von
AppCompatDelegate.setDefaultNightMode, um das Thema programmatisch anzuwenden, oder im Manifest der Activity mittelsandroid:theme.
- Erstellen von Styles für helle und dunkle Themen (z.B.
Das Anwenden eines Themas erfordert oft das Neuerstellen der Activity, damit die Ressourcen korrekt geladen werden. Dafür kann recreate() verwendet werden.