Kako sačuvati i primeniti podešavanja teme u Android aplikaciji?
sobes.tech АИ
Одговор од АИ
Za sačuvanje i primenu podešavanja teme u Android aplikaciji može se koristiti nekoliko pristupa.
-
SharedPreferences: Jednostavan način za čuvanje malog obima podataka, kao što je identifikator odabrane teme.// Čuvanje teme val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Čitanje teme 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 // Primena teme u Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Moderniji i asinhroni način za čuvanje podataka, koji nudi tokove podataka i pouzdanije skladištenje.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Čuvanje teme suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Dobijanje teme 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 }Primena teme u Activity može se desiti nakon dobijanja vrednosti iz
DataStore(npr. korišćenjemcollectu korutini) i pozivasetTheme. Može biti potrebno da se Activity ponovo kreira nakon promene teme za ispravno prikazivanje. -
Sistemske postavke teme: Android takođe pruža ugrađenu podršku za teme: svetlu, tamnu i podrazumevanu (koja prati sistemske postavke). To se može implementirati putem resursa.
- Kreiranje stilova za svetlu i tamnu temu (npr.
res/values/themes.xmlires/values-night/themes.xml). - Podešavanje
AppCompatDelegate.setDefaultNightModeza primenu teme programatski ili podešavanje u manifestu activity-ja putemandroid:theme.
- Kreiranje stilova za svetlu i tamnu temu (npr.
Primena teme često zahteva ponovno kreiranje Activity-ja kako bi resursi bili pravilno učitani. Za to se može koristiti recreate().