Sobes.tech
Junior

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.

  1. Mövzunun saxlanması: Seçilmiş mövzunun identifikatorunu (məsələn, "light", "dark", "system") saxlamaq üçün SharedPreferences istifadə 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()
    
  2. Yandırılarkən mövzunun tətbiqi: Əsas Activity və ya Application sinifində 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)
    }
    
  3. İ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, RadioButton ayarlarında) təqdim edin. Seçim zamanı yeni identifikatoru SharedPreferences-ə saxlayın və dərhal AppCompatDelegate.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, cari Activity-də bütün View-lər düzgün şəkildə yenidən çəkilsin.

  4. styles.xml-də mövzuların təyin edilməsi: Parlaq və qaranlıq mövzular üçün res/values/styles.xmlres/values-night/styles.xml faylları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>
    
  5. 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-u onConfigurationChanged()-də istifadə edə bilərsiniz, lakin AppCompatDelegate adətən bu prosesi avtomatik idarə edir, xüsusən MODE_NIGHT_FOLLOW_SYSTEM istifadə 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.