Ինչպես պահպանել և օգտագործել թեմայի կարգավորումները Android հավելվածում?
sobes.tech AI
Պատասխան AI-ից
Արդյունավետ մոտեցումը ներառում է SharedPreferences օգտագործումը ընտրված թեմայի պահպանման համար և AppCompatDelegate.setDefaultNightMode() դրա կիրառման համար:
-
Թեմայի պահպանումը: Օգտագործեք
SharedPreferences՝ ընտրված թեմայի նույնականացման համար (օրինակ՝ "լույս", "գիշեր", "համակարգ").// Ստանում ենք SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Ստանում ենք խմբագրիչ val editor = sharedPrefs.edit() // Կիրառում ենք թեման ID themeId editor.putString("current_theme", themeId) // Պահպանում ենք փոփոխությունները editor.apply() -
Թեմայի կիրառումը գործարկման ժամանակ: Հիմնական
ActivityկամApplicationդասում կարդացեք պահպանված արժեքըSharedPreferences-ից և կիրառեք թեման:// Կարդում ենք պահպանված թեմայի արժեքը val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Դեպի համակարգը ըստ նախընտրության // Կիրառում ենք թեման 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) } -
Օգտատիրոջ կողմից թեմայի փոփոխությունը: Պատրաստեք օգտագործողի ինտերֆեյս (օրինակ՝
RadioButtonկարգավորումների մեջ), որտեղ օգտատերը կարող է ընտրել թեման: Ընտրության ժամանակ պահպանեք նոր նույնականացումըSharedPreferences-ում և անմիջապես կիրառեք թեման՝ զանգահարելովAppCompatDelegate.setDefaultNightMode()և անհրաժեշտության դեպքում վերագործարկելովActivity՝ ճիշտ կիրառելու համար:// Օրինակ՝ օգտատերը ընտրել է գիշերային թեմա val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Կիրառում ենք թեման անմիջապես AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // կամ `recreate()`՝ ամբողջական կիրառման համար // recreate()Activity-ի վերագործարկումըrecreate()-ով կարող է անհրաժեշտ լինել, որպեսզի բոլոր տեսքերը ճիշտ վերանվագրվեն նոր թեմայով: -
Թեմաների սահմանում
styles.xml-ում: Սահմանեք լույս և գիշեր թեմաների ոճերըres/values/styles.xmlևres/values-night/styles.xml-ում համապատասխանաբար, ժառանգելովTheme.AppCompat-ից:<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Լույս թեմայի ոճերի սահմանումներ --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Գիշերային թեմայի ոճերի սահմանումներ --> </style>AndroidManifest.xml-ում նշեք բազային թեման՝<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activities --> </application> -
Թեմայի փոփոխությունների հսկում: Եթե համակարգը փոխում է թեման (օրինակ՝ ըստ ժամանակացույցի կամ ձեռքով օգտագործողի կողմից), կարող եք օգտագործել
Configuration.uiMode-ըonConfigurationChanged()-ում՝ արձագանքելու համար, բայցAppCompatDelegate-ը սովորաբար ինքնուրույն է դա անումMODE_NIGHT_FOLLOW_SYSTEM-ի դեպքում:@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Կարող եք ստուգել նոր թեման, եթե անհրաժեշտ է // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
AppCompatDelegate-ի օգտագործումը առաջարկվող մոտեցումն է թեմաների աջակցելու համար Android-ում, քանի որ այն ապահովում է հետամնաց համատեղելիություն և ճիշտ աշխատում է տարբեր աջակցման գրադարանի բաղադրիչների հետ։