Πώς αποθηκεύετε και εφαρμόζετε τις ρυθμίσεις θέματος σε μια εφαρμογή 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σε μια coroutine) και την κλήσηsetTheme. Ίσως χρειαστεί να αναδημιουργηθεί η Activity μετά την αλλαγή του θέματος για σωστή φόρτωση των πόρων. -
Ρυθμίσεις συστήματος για το θέμα: Το Android παρέχει επίσης ενσωματωμένη υποστήριξη θεμάτων: φωτεινό, σκοτεινό και προεπιλεγμένο (ακολουθεί τις ρυθμίσεις συστήματος). Αυτό μπορεί να υλοποιηθεί μέσω πόρων.
- Δημιουργήστε στυλ για φωτεινό και σκοτεινό θέμα (π.χ.,
res/values/themes.xmlκαιres/values-night/themes.xml). - Ρυθμίστε το
AppCompatDelegate.setDefaultNightModeγια εφαρμογή του θέματος προγραμματιστικά ή στο μανιφέστο της δραστηριότητας μέσωandroid:theme.
- Δημιουργήστε στυλ για φωτεινό και σκοτεινό θέμα (π.χ.,
Η εφαρμογή ενός θέματος συχνά απαιτεί την αναδημιουργία της Activity ώστε οι πόροι να φορτώνονται σωστά. Για αυτό, μπορείτε να χρησιμοποιήσετε το recreate().