Android tətbiqində mövzu parametrlərini necə yadda saxlayıb istifadə etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Effektiv yanaşma SharedPreferences istifadə edərək seçilmiş mövzunu saxlamağı və AppCompatDelegate.setDefaultNightMode() istifadə edərək tətbiq etməyi əhatə edir.
-
Mövzunun saxlanması: Seçilmiş mövzunun identifikatorunu (məsələn, "light", "dark", "system") saxlamaq üçün
SharedPreferencesistifadə edin.// SharedPreferences alın val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Redaktor alın val editor = sharedPrefs.edit() // Mövzunu ID ilə tətbiq edin editor.putString("current_theme", themeId) // Dəyişiklikləri saxlayın editor.apply() -
Yandırılarkən mövzunun tətbiqi: Əsas
Activityvə yaApplicationsinifində saxlanılan dəyəri oxuyun və mövzunu tətbiq edin.// Saxlanılan mövzu dəyərini oxuyuruq val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Əsasən 'system' // Mövzunu tətbiq edin 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) } -
İstifadəçi tərəfindən mövzunun dəyişdirilməsi: İstifadəçiyə mövzunu seçə biləcəyi interfeys (məsələn,
RadioButtonayarlarında) təqdim edin. Seçim zamanı yeni identifikatoruSharedPreferences-ə saxlayın və dərhalAppCompatDelegate.setDefaultNightMode()çağıraraq mövzunu tətbiq edin və lazım gəlsə,Activity-ni yenidən başlatın.// Tutaq ki, istifadəçi qaranlıq mövzunu seçdi val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Mövzunu dərhal tətbiq edin AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // və ya tam mövzu tətbiqi üçün recreate() // recreate()Mövzunu tam tətbiq etmək üçün
recreate()istifadə etmək lazımdır ki, cariActivity-də bütün View-lər düzgün şəkildə yenidən çəkilsin. -
styles.xml-də mövzuların təyin edilməsi: Parlaq və qaranlıq mövzular üçünres/values/styles.xmlvəres/values-night/styles.xmlfayllarında stilər təyin edin,Theme.AppCompat-dən irs alın.<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Parlaq mövzu üçün stil təyinatları --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Qaranlıq mövzu üçün stil təyinatları --> </style>AndroidManifest.xml-də tətbiqin əsas mövzusunu göstərin:<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activity-lər --> </application> -
Mövzu dəyişikliklərinin dinlənməsi: Sistem tərəfindən mövzu dəyişiklikləri (məsələn, cədvələ görə və ya istifadəçi tərəfindən əl ilə) üçün
Configuration.uiMode-uonConfigurationChanged()-də istifadə edə bilərsiniz, lakinAppCompatDelegateadətən bu prosesi avtomatik idarə edir, xüsusənMODE_NIGHT_FOLLOW_SYSTEMistifadə edilərsə.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Yeni mövzunu yoxlamaq olar, lazım gələrsə // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
AppCompatDelegate istifadə etmək Android-də mövzuları dəstəkləmək üçün tövsiyə olunan yanaşmadır, çünki o, geriyə uyğunluğu və müxtəlif dəstək kitabxanası komponentləri ilə düzgün işləməni təmin edir.