Android колдонмосунда теманын жөндөөлөрүн кантип сактап жана колдонуу керек?
sobes.tech AI
AIден жооп
Эффективдүү ыкма SharedPreferences колдонуп, тандалган теманы сактоо жана AppCompatDelegate.setDefaultNightMode() аркылуу аны колдонуу болуп саналат:
-
Теманы сактоо:
SharedPreferencesколдонуп, тандалган теманын идентификаторун сактаңыз (мисалы, "light", "dark", "system").// SharedPreferences алуу val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // редактор алуу val editor = sharedPrefs.edit() // Теманы ID менен колдонуу editor.putString("current_theme", themeId) // Өзгөртүүлөрдү сактоо editor.apply() -
Теманы колдонуу ишке киргизүүдө: Негизги
ActivityжеApplicationкласста сакталган мааниниSharedPreferencesаркылуу окуп, теманы колдонуу:// Сакталган теманын маанисин окуу val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Дефолт "system" // Теманы колдонуу 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) } -
Колдонуучу тарабынан теманы өзгөртүү: Колдонуучу интерфейсин (мисалы,
RadioButtonорнотуу) түзүңүз, анда колдонуучу теманы тандай алат. Тандоодон кийин жаңы идентификатордуSharedPreferencesке сактап, теманы колдонуп,AppCompatDelegate.setDefaultNightMode()чакырыңыз жана керек болсоActivityкайра жүктөңүз:// Мисалы, колдонуучу караңгы теманы тандады val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Теманы дароо колдонуу AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // же `recreate()` толук колдонуу үчүн // recreate()Activityкайра жүктөөrecreate()аркылуу керек болушу мүмкүн, бардык көрүнүштөр туура жаңы темада кайра чийилип чыгышы үчүн: -
styles.xmlфайлында темаларды аныктоо: Жарык жана караңгы темалар үчүн стильдердиres/values/styles.xmlжанаres/values-night/styles.xmlфайлдарында аныктаңыз,Theme.AppCompatнегизинде:<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Жарык тема үчүн стильдердин аныктамалары --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Караңгы тема үчүн стильдердин аныктамалары --> </style>AndroidManifest.xmlфайлында негизги тема көрсөтүлөт:<!-- AndroidManifest.xml --> <application android:theme="@style/AppTheme.Light" ...> <!-- ... Activities --> </application> -
Тема өзгөрүүлөрүн байкоо: Эгер системанын темасы өзгөрсө (мисалы, график боюнча же колдонуучу кол менен орноткон болсо),
Configuration.uiModeколдонуп,onConfigurationChanged()функциясында реакция кылсаңыз болот, бирокAppCompatDelegateавтоматтык түрдөMODE_NIGHT_FOLLOW_SYSTEMколдонулганда иштейт.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Жаңы теманы текшерсе болот, керек болсо // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
AppCompatDelegate колдонуу Android үчүн темаларды колдоо үчүн сунушталат, анткени ал керектүү керектөөчүлүк жана ар кандай китепкана компоненттери менен туура иштейт.