Ako uložiť a použiť nastavenia motívu v aplikácii na Android?
sobes.tech AI
Odpoveď od AI
Efektívny prístup zahŕňa použitie SharedPreferences na uloženie vybranej témy a AppCompatDelegate.setDefaultNightMode() na jej aplikáciu.
-
Uloženie témy: Použite
SharedPreferencesna uloženie identifikátora vybranej témy (napríklad, "light", "dark", "system").// Získanie SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Získanie editora val editor = sharedPrefs.edit() // Aplikovanie témy s ID themeId editor.putString("current_theme", themeId) // Uloženie zmien editor.apply() -
Aplikovanie témy pri štarte: V hlavnej
ActivityaleboApplicationtriede načítajte uloženú hodnotu a aplikujte tému.// Čítanie uloženého hodnoty témy val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Predvolene 'system' // Aplikovanie témy 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) } -
Zmena témy používateľom: Poskytnite používateľské rozhranie (napríklad,
RadioButtonv nastaveniach), kde si používateľ môže vybrať tému. Pri výbere uložte nový identifikátor doSharedPreferencesa okamžite aplikujte tému volanímAppCompatDelegate.setDefaultNightMode()a v prípade potreby reštartujteActivityna správne použitie témy.// Predpokladáme, že používateľ zvolil tmavú tému val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Aplikujte tému okamžite AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Alebo recreate() pre úplné použitie témy // recreate()Reštart
Activitypomocourecreate()môže byť potrebný, aby sa všetky View v aktuálnejActivitysprávne prekreslili s novou témou. -
Definovanie tém v
styles.xml: Definujte štýly pre svetlú a tmavú tému vres/values/styles.xmlares/values-night/styles.xmls odvodom odTheme.AppCompat.<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Definície štýlov pre svetlú tému --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Definície štýlov pre tmavú tému --> </style>V
AndroidManifest.xmluveďte základnú tému aplikácie:<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activities --> </application> -
Sledovanie zmien témy: V prípade, že sa téma mení systémovo (napríklad podľa rozvrhu alebo manuálne používateľom cez nastavenia telefónu), môžete použiť
Configuration.uiModevonConfigurationChanged()na reakciu, aleAppCompatDelegateto zvyčajne spravuje automaticky pri použitíMODE_NIGHT_FOLLOW_SYSTEM.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Môžete skontrolovať novú tému, ak je potrebné // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
Použitie AppCompatDelegate je odporúčaný prístup na podporu tém na Android, pretože zabezpečuje spätnú kompatibilitu a správnu funkčnosť s rôznymi komponentmi knižnice podpory.