Sobes.tech
Middle

Android ilovasida mavzu sozlamalarini qanday saqlash va qo'llash mumkin?

sobes.tech AI

AIdan javob

Android ilovalarida mavzuni saqlash va qoʻllash uchun bir nechta yondashuvlar mavjud.

  1. SharedPreferences: Tanlangan mavzuni identifikatori kabi kichik ma'lumotlarni saqlash uchun oddiy usul.

    // Mavzuni saqlash
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
    with (sharedPref.edit()) {
        putInt(getString(R.string.saved_theme_key), themeId)
        apply()
    }
    
    // Mavzuni oʻqish
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
    val defaultValue = resources.getInteger(R.integer.default_theme_id)
    val savedThemeId = sharedPref?.getInt(getString(R.string.saved_theme_key), defaultValue) ?: defaultValue
    
    // Activityda mavzuni qoʻllash
    setTheme(savedThemeId)
    super.onCreate(savedInstanceState)
    
  2. DataStore: Zamonaviy va asenkron usul boʻlib, maʼlumotlarni saqlash uchun oqimlar va ishonchliroq saqlashni taklif qiladi.

    // DataStore
    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    
    // Mavzuni saqlash
    suspend fun saveTheme(themeId: Int) {
        dataStore.edit { settings ->
            settings[intPreferencesKey("theme_id")] = themeId
        }
    }
    
    // Mavzuni olish
    val themeFlow: Flow<Int> = dataStore.data
        .catch { exception ->
            if (exception is IOException) {
                emit(emptyPreferences())
            } else {
                throw exception
            }
        }
        .map { preferences ->
            preferences[intPreferencesKey("theme_id")] ?: R.style.Theme_App
        }
    

    Mavzuni Activityda qoʻllash, DataStoredan qiymat olgandan soʻng (masalan, collect yordamida coroutine ichida) va setTheme chaqirilgandan soʻng amalga oshirilishi mumkin. Mavzuni oʻzgartirgandan soʻng, resurslar toʻgʻri yuklanishi uchun Activityni qayta yaratish zarur boʻlishi mumkin.

  3. Tizim sozlamalari uchun mavzu: Android shuningdek, mavzular uchun oʻz ichiga olgan qoʻllab-quvvatlashni taqdim etadi: yorqin, qorongʻu va standart (tizim sozlamalariga amal qiladi). Bu resurslar orqali amalga oshirilishi mumkin.

    • Yorqin va qorongʻu mavzular uchun uslublar yaratish (masalan, res/values/themes.xml va res/values-night/themes.xml).
    • AppCompatDelegate.setDefaultNightMode ni dasturiy ravishda yoki manifestda android:theme orqali mavzuni qoʻllash uchun sozlash.

Mavzuni qoʻllash koʻpincha resurslar toʻgʻri yuklanishi uchun Activityni qayta yaratishni talab qiladi. Buning uchun recreate() dan foydalanish mumkin.