Kaip išsaugoti ir naudoti temos nustatymus Android programėlėje?
sobes.tech AI
Atsakymas iš AI
Veiksmingas požiūris apima SharedPreferences naudojimą pasirinktos temos išsaugojimui ir AppCompatDelegate.setDefaultNightMode() taikymą:
-
Temos išsaugojimas: Naudokite
SharedPreferencessaugoti pasirinktos temos identifikatorių (pavyzdžiui, "light", "dark", "system").// Gaukite SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Gaukite redaktorių val editor = sharedPrefs.edit() // Taikykite temą su ID themeId editor.putString("current_theme", themeId) // Išsaugokite pakeitimus editor.apply() -
Temos taikymas paleidžiant: Pagrindiniame
ActivityarbaApplicationklasėje perskaitykite išsaugotą reikšmę išSharedPreferencesir taikykite temą:// Perskaitykite išsaugotą temos reikšmę val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Numatyta "system" // Taikykite temą 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) } -
Vartotojo keičiamą temą: Sukurkite vartotojo sąsają (pavyzdžiui,
RadioButtonnustatymuose), kur vartotojas gali pasirinkti temą. Pasirinkus, išsaugokite naują identifikatoriųSharedPreferencesir nedelsiant taikykite temą, iškviesdamiAppCompatDelegate.setDefaultNightMode()ir, jei reikia, perkraukiteActivitytinkamam taikymui:// Tarkime, vartotojas pasirinko tamsią temą val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Taikykite temą nedelsiant AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Arba `recreate()` pilnam taikymui // recreate()Activityperkrovimas naudojantrecreate()gali būti būtinas, kad visi vaizdai dabartiniameActivitybūtų teisingai perpiešti su nauja tema. -
Temų apibrėžimas
styles.xml: Apibrėžkite šviesos ir tamsos temasres/values/styles.xmlirres/values-night/styles.xmlatitinkamai, paveldėdami išTheme.AppCompat:<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Šviesos temos stiliaus apibrėžimai --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Tamsios temos stiliaus apibrėžimai --> </style>AndroidManifest.xmlnurodykite pagrindinę programos temą:<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activities --> </application> -
Stebėjimas dėl temų pakeitimų: Jei sistema keičia temą (pavyzdžiui, pagal grafiką arba rankiniu būdu vartotojo nustatymais), galite naudoti
Configuration.uiModeonConfigurationChanged()reakcijai, tačiauAppCompatDelegatedažniausiai tai automatiškai tvarko naudojantMODE_NIGHT_FOLLOW_SYSTEM.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Galite patikrinti naują temą, jei reikia // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
Naudojimas AppCompatDelegate yra rekomenduojamas požiūris temų palaikymui Android, nes jis užtikrina atgalinį suderinamumą ir tinkamą darbą su įvairiais bibliotekos komponentais.