Kuidas salvestada ja kasutada teema seadeid Android rakenduses?
sobes.tech AI
Vastus AI-lt
Tõhusa lähenemisviisi hõlmab SharedPreferences kasutamist valitud teema salvestamiseks ja AppCompatDelegate.setDefaultNightMode() rakendamist:
-
Teema salvestamine: Kasutage
SharedPreferences, et salvestada valitud teema identifikaator (näiteks "light", "dark", "system").// Saame SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Saame redaktori val editor = sharedPrefs.edit() // Rakendame teema ID-ga themeId editor.putString("current_theme", themeId) // Salvestame muudatused editor.apply() -
Teema rakendamine käivitamisel: Peamises
ActivityvõiApplicationklassis loe salvestatud väärtusSharedPreferences-st ja rakenda teema:// Loe salvestatud teema väärtus val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Vaikimisi 'system' // Rakenda teema when (themeId) { "light" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) "dark" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) "system" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) } -
Kasutaja teema muutmine: Looge kasutajaliides (näiteks
RadioButtonseadetes), kus kasutaja saab valida teema. Valides salvestage uus identifikaatorSharedPreferences-s ja rakendage teemat kohe, kutsudes väljaAppCompatDelegate.setDefaultNightMode()ning vajadusel taaskäivitageActivity, et teemat õigesti rakendada:// Oletame, et kasutaja valis tume teema val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Rakenda teema kohe AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Või recreate() täielikuks rakendamiseks // recreate()Activitytaaskäivitaminerecreate()-ga võib olla vajalik, et kõik vaated praegusesActivityõigesti uueneksid uue teema järgi. -
Teemade määratlemine
styles.xml-is: Määratlege heleda ja tume teema stiilidres/values/styles.xmljares/values-night/styles.xml-is vastavalt, päridesTheme.AppCompat-ist:<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Heleda teema stiilide määratlused --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Tume teema stiilide määratlused --> </style>AndroidManifest.xml-is määrake rakenduse põhiteema:
<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activities --> </application> -
Teemamuutuste jälgimine: Kui süsteem muudab teemat (näiteks ajakava järgi või kasutaja käsitsi telefonis seadistades), saate kasutada
Configuration.uiModeonConfigurationChanged()-is reageerimiseks, kuidAppCompatDelegatehaldab seda tavaliselt automaatselt, kasutadesMODE_NIGHT_FOLLOW_SYSTEM.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Võite kontrollida uut teemat, kui vaja // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
AppCompatDelegate kasutamine on soovitatav lähenemisviis teemade toetamiseks Androidis, kuna see tagab tagasiparimuse ja korrektse toimimise erinevate toetuse teekonna komponentidega.