Cum să salvezi și să utilizezi setările temei într-o aplicație Android?
sobes.tech AI
Răspuns de la AI
Abordarea eficientă include utilizarea SharedPreferences pentru salvarea temei selectate și AppCompatDelegate.setDefaultNightMode() pentru aplicarea acesteia.
-
Salvarea temei: Utilizați
SharedPreferencespentru a stoca identificatorul temei selectate (de exemplu, "light", "dark", "system").// Obțineți SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Obțineți editorul val editor = sharedPrefs.edit() // Aplicați tema cu ID-ul themeId editor.putString("current_theme", themeId) // Salvați modificările editor.apply() -
Aplicarea temei la pornire: În clasa principală
ActivitysauApplication, citiți valoarea salvată dinSharedPreferencesși aplicați tema.// Citiți valoarea salvată a temei val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Implicit 'system' // Aplicați tema 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) } -
Schimbarea temei de către utilizator: Oferiți o interfață utilizator (de exemplu,
RadioButtonîn setări), unde utilizatorul poate alege tema. La alegere, salvați noul identificator înSharedPreferencesși aplicați tema imediat, apelândAppCompatDelegate.setDefaultNightMode()și, dacă este necesar, repornindActivitypentru aplicarea corectă a temei.// Presupunem că utilizatorul a ales tema întunecată val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Aplicați tema imediat AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Sau recreate() pentru aplicarea completă a temei // recreate()Reporniți
Activitycurecreate()pentru ca toate View-urile dinActivitycurent să fie reafișate corect cu noua temă. -
Definirea temelor în
styles.xml: Definiți stilurile pentru tema luminoasă și întunecată înres/values/styles.xmlșires/values-night/styles.xml, respectiv, moștenind de laTheme.AppCompat.<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Definiții de stil pentru tema luminoasă --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Definiții de stil pentru tema întunecată --> </style>În
AndroidManifest.xml, specificați tema de bază a aplicației:<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activități --> </application> -
Ascultarea schimbărilor de temă: În cazul în care tema se schimbă sistematic (de exemplu, după program sau manual de utilizator prin setările telefonului), puteți folosi
Configuration.uiModeînonConfigurationChanged()pentru a reacționa, darAppCompatDelegategestionează de obicei acest lucru automat când se foloseșteMODE_NIGHT_FOLLOW_SYSTEM.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Puteți verifica noua temă, dacă este necesar // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
Utilizarea AppCompatDelegate este abordarea recomandată pentru suportul temelor pe Android, deoarece asigură compatibilitatea înapoi și funcționarea corectă cu diferite componente ale bibliotecii de suport.