როგორ შევინახოთ და გამოვიყენოთ თემა პარამეტრები Android აპლიკაციაში?
sobes.tech AI
პასუხი AI-სგან
ეფექტური მიდგომა მოიცავს SharedPreferences-ის გამოყენებას არჩეული თემის შენახვისთვის და AppCompatDelegate.setDefaultNightMode()-ის გამოყენებას მის განსახორციელებლად:
-
თემის შენახვა: გამოიყენეთ
SharedPreferencesარჩეული თემის იდენტიფიკატორის შენახვისთვის (მაგალითად, "light", "dark", "system").// მიიღეთ SharedPreferences val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // მიიღეთ რედაქტორი val editor = sharedPrefs.edit() // გამოიყენეთ თემის ID editor.putString("current_theme", themeId) // შეინახეთ ცვლილებები editor.apply() -
თემის გამოყენება აპლიკაციის დაწყებაზე: მთავარი
ActivityანApplicationკლასში წაიკითხეთ შენახული მნიშვნელობაSharedPreferences-დან და გამოიყენეთ თემას:// წაიკითხეთ შენახული თემის მნიშვნელობა val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // დეფოლტი '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.uiModeonConfigurationChanged()-ში რეაგირებისათვის, მაგრამ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-ზე, რადგან ის უზრუნველყოფს უკუგაშენებადობას და სწორად მუშაობს მხარდაჭერის ბიბლიოთეკის სხვადასხვა კომპონენტებთან.