Jak uložit a používat nastavení motivu v aplikaci na Androidu?
sobes.tech AI
Odpověď od AI
Efektivní přístup zahrnuje použití SharedPreferences pro uložení vybraného motivu a AppCompatDelegate.setDefaultNightMode() pro jeho použití.
-
Uložení motivu: Použijte
SharedPreferencesk uložení identifikátoru vybraného motivu (například "light", "dark", "system").// Získání SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Získání editoru val editor = sharedPrefs.edit() // Použití motivu s ID themeId editor.putString("current_theme", themeId) // Uložení změn editor.apply() -
Použití motivu při spuštění: V hlavní třídě
ActivityneboApplicationnačtěte uloženou hodnotu a aplikujte motiv.// Čtení uložené hodnoty motivu val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Výchozí 'system' // Aplikace motivu 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) } -
Změna motivu uživatelem: Poskytněte uživatelské rozhraní (například
RadioButtonv nastavení), kde si uživatel může vybrat motiv. Při výběru uložte nový identifikátor doSharedPreferencesa ihned aplikujte motiv volánímAppCompatDelegate.setDefaultNightMode()a případně restartujteActivitypro správné použití motivu.// Předpokládejme, že uživatel zvolil tmavý motiv val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Aplikace motivu ihned AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Nebo recreate() pro úplné použití motivu // recreate()Restart
Activitypomocírecreate()může být nutný, aby se všechny View v aktuálníActivitysprávně překreslily s novým motivem. -
Definice motivů v
styles.xml: Definujte styly pro světlý a tmavý motiv vres/values/styles.xmlares/values-night/styles.xmlodpovídajícím způsobem, děděním odTheme.AppCompat.<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Definice stylů pro světlý motiv --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Definice stylů pro tmavý motiv --> </style>V
AndroidManifest.xmluveďte základní motiv aplikace:<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Aktivity --> </application> -
Sledování změn motivu: Pokud se motiv změní systémově (například podle rozvrhu nebo ručně uživatelem přes nastavení telefonu), můžete použít
Configuration.uiModevonConfigurationChanged()pro reakci, aleAppCompatDelegateto obvykle spravuje automaticky při použitíMODE_NIGHT_FOLLOW_SYSTEM.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Můžete zkontrolovat nový motiv, pokud je třeba // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
Použití AppCompatDelegate je doporučený přístup pro podporu motivů na Androidu, protože zajišťuje zpětnou kompatibilitu a správnou funkčnost s různými komponenty podpůrné knihovny.