Как да запазите и приложите настройките на темата в приложение за Android?
sobes.tech AI
Отговор от AI
За запазване и прилагане на настройките на темата в Android приложение могат да се използват няколко подхода.
-
SharedPreferences: Прост начин за запазване на малък обем данни, като идентификатор на избраната тема.// Запазване на тема val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Четене на тема 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 // Прилагане на тема в Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: По-съвременен и асинхронен начин за запазване на данни, който предлага потоци от данни и по-надеждно съхранение.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Запазване на тема suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Получаване на тема 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 }Прилагането на тема в Activity може да се случи след получаване на стойността от
DataStore(например, с използване наcollectв корутина) и извикване наsetTheme. Може да е необходимо да се пресъздаде Activity след промяна на темата за правилно показване. -
Системни настройки на темата: Android също така предоставя вградена поддръжка за теми: светла, тъмна и по подразбиране (следва системните настройки). Това може да се реализира чрез ресурси.
- Създаване на стилове за светла и тъмна тема (например,
res/values/themes.xmlиres/values-night/themes.xml). - Настройване на
AppCompatDelegate.setDefaultNightModeза прилагане на темата програмно или конфигуриране в манифеста на activity чрезandroid:theme.
- Създаване на стилове за светла и тъмна тема (например,
Прилагането на тема често изисква пресъздаване на Activity, за да бъдат правилно заредени ресурсите. За това може да се използва recreate().