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 колдонуу аркылуу программалык түрдө теманы колдонуу же манифестте android:theme аркылуу орнотуу.

Теманы колдонуу көбүнесе Activity кайра түзүүнү талап кылат, ресурстар туура жүктөлүшү үчүн. Бул үчүн recreate() колдонсо болот.