Sobes.tech
Junior

Android ilovasida mavzu sozlamalarini qanday saqlash va foydalanish mumkin?

sobes.tech AI

AIdan javob

Samara samarali yondashuv tanlangan mavzuni saqlash uchun SharedPreferences dan foydalanishni va uni qo'llash uchun AppCompatDelegate.setDefaultNightMode() ni ishlatishni o'z ichiga oladi.

  1. Mavzuni saqlash: Tanlangan mavzu identifikatorini (masalan, "light", "dark", "system") saqlash uchun SharedPreferences dan foydalaning.

    // SharedPreferences ni oling
    val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
    // Tahrirchini oling
    val editor = sharedPrefs.edit()
    // themeId bilan mavzuni qo'llang
    editor.putString("current_theme", themeId)
    // O'zgarishlarni saqlang
    editor.apply()
    
  2. Dastlabki boshlanishda mavzuni qo'llash: Asosiy Activity yoki Application sinfida, saqlangan qiymatni SharedPreferences dan o'qing va mavzuni qo'llang.

    // Saqlangan mavzu qiymatini o'qing
    val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
        .getString("current_theme", "system") // Standart 'system'
    
    // Mavzuni qo'llash
    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. Foydalanuvchi tomonidan mavzuni o'zgartirish: Foydalanuvchi uchun interfeys (masalan, sozlamalarda RadioButton) taqdim eting, bu yerda foydalanuvchi mavzuni tanlashi mumkin. Tanlanganda, yangi identifikatorni SharedPreferences ga saqlang va darhol AppCompatDelegate.setDefaultNightMode() ni chaqirib, mavzuni qo'llang va agar kerak bo'lsa, Activity ni qayta ishga tushiring, to'g'ri qo'llash uchun.

    // Faraz qilaylik, foydalanuvchi qorong'u mavzuni tanladi
    val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
    val editor = sharedPrefs.edit()
    editor.putString("current_theme", "dark")
    editor.apply()
    
    // Mavzuni darhol qo'llash
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    
    // Yoki to'liq mavzuni qo'llash uchun recreate() ni ishlating
    // recreate()
    

recreate() yordamida Activity ni qayta ishga tushirish, hozirgi Activity dagi barcha View lar yangi mavzuga to'g'ri chizilishi uchun zarur bo'lishi mumkin.

  1. styles.xml da mavzularni aniqlash: Yoritilgan va qorong'u mavzular uchun uslublarni res/values/styles.xml va res/values-night/styles.xml da aniqlang va Theme.AppCompat temalaridan meros oling.

    <!-- res/values/styles.xml -->
    <style name="AppTheme.Light" parent="Theme.AppCompat.Light">
        <!-- Yoritilgan mavzu uchun uslublar aniqlanishi -->
    </style>
    
    <!-- res/values-night/styles.xml -->
    <style name="AppTheme.Dark" parent="Theme.AppCompat">
        <!-- Qorong'u mavzu uchun uslublar aniqlanishi -->
    </style>
    

AndroidManifest.xml da, ilovaning asosiy mavzusini ko'rsating:

```xml
<!-- AndroidManifest.xml -->
<application
    android:theme="@style/AppTheme.Light"
    ...>
    <!-- ... Activities -->
</application>
```
  1. Mavzular o'zgarishini kuzatish: Sistemada (masalan, jadval bo'yicha yoki telefon sozlamalari orqali qo'lda) mavzu o'zgarganda, onConfigurationChanged() da Configuration.uiMode ni ishlatib, javob berish mumkin, ammo AppCompatDelegate odatda bu holatni avtomatik ravishda boshqaradi, MODE_NIGHT_FOLLOW_SYSTEM ni ishlatishda.

    @Override
    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        // Yangi mavzuni tekshirish mumkin, agar kerak bo'lsa
        // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK
        // ...
    }
    

AppCompatDelegate dan foydalanish, Androidda mavzularni qo'llab-quvvatlash uchun tavsiya etilgan yondashuv bo'lib, u orqaga moslikni ta'minlaydi va turli xil kutubxona komponentlari bilan to'g'ri ishlashni ta'minlaydi.