Sobes.tech
Middle

Чӣ гуна нигоҳ доштани ва татбиқ кардани танзимоти мавзӯъ дар барномаи Android?

sobes.tech AI

Ҷавоб аз AI

Барои нигоҳ доштани ва татбиқ кардани танзимоти мавзӯъ дар барномаи Android метавонад чанд роҳ истифода шавад.

  1. SharedPreferences: роҳи содда барои нигоҳ доштани миқдори ками маълумот, мисли шенасоии мавзӯи интихобшуда.

    // Ҳифз кардани мавзӯъ
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
    with (sharedPref.edit()) {
        putInt(getString(R.string.saved_theme_key), themeId)
        apply()
    }
    
    // Хондани мавзӯъ
    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
    
    // Татбиқи мавзӯъ дар Activity
    setTheme(savedThemeId)
    super.onCreate(savedInstanceState)
    
  2. DataStore: роҳи муосир ва асинхрон барои нигоҳ доштани маълумот, ки ҷараёнҳои маълумотро пешниҳод мекунад ва нигоҳдории боэътимодтар.

    // DataStore
    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    
    // Ҳифз кардани мавзӯъ
    suspend fun saveTheme(themeId: Int) {
        dataStore.edit { settings ->
            settings[intPreferencesKey("theme_id")] = themeId
        }
    }
    
    // Гирифтани мавзӯъ
    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
        }
    

    Татбиқи мавзӯъ дар Activity метавонад пас аз гирифтани арзиш аз DataStore (масалан, бо истифода аз collect дар корутина) ва даъвати setTheme сурат гирад. Мумкин аст, ки пас аз тағир додани мавзӯъ Activity навсозӣ шавад барои намоиши дуруст.

  3. Танзимоти системии мавзӯъ: Android инчунин дастгирии дарунсохт барои мавзӯъҳоро пешниҳод мекунад: равшан, торик ва дархостӣ (аз системӣ пайравӣ мекунад). Ин метавонад тавассути захираҳо амалӣ карда шавад.

    • Эҷоди услубҳо барои мавзӯъҳои равшан ва торик (масалан, res/values/themes.xml ва res/values-night/themes.xml).
    • Танзим кардани AppCompatDelegate.setDefaultNightMode барои татбиқи мавзӯъ ба программӣ ё танзим дар манифести activity тавассути android:theme.

Татбиқи мавзӯъ одатан талаб мекунад, ки Activity дубора сохта шавад, то захираҳо дуруст бор карда шаванд. Барои ин, метавонед recreate()-ро истифода баред.