Чӣ гуна нигоҳ доштани ва истифодаи танзимоти мавзӯъ дар барномаи 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-и themeId editor.putString("current_theme", themeId) // Ҳифз кардани тағирот editor.apply() -
Татбиқи мавзӯъ дар оғоз: Дар
ActivityёApplicationасосӣ, арзиши нигоҳдоштаро хонда ва мавзӯъро татбиқ кунед.// Хондани арзиши нигоҳдоштаро 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дар танзимотҳо) пешниҳод кунед, ки дар он корбар метавонад мавзӯъро интихоб кунад. Ҳангоми интихоби он, ID-ро дар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()метавонад зарур бошад, то ҳама View-ҳо дарActivityҳозира дуруст бо мавзӯи нав тасвир шаванд. -
Таъйин кардани мавзӯъҳо дар
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 аст, зеро он мутобиқатро таъмин мекунад ва бо компонентҳои гуногуни китобхонаи дастгирӣ дуруст кор мекунад.