我继承了“ Theme.AppCompat.DayNight”主题,以在Android Q上自动支持暗模式,并在以前的版本中手动支持暗模式。在“设置”中,我让用户选择“打开”,“关闭”或“自动”,然后使用以下代码:
AppCompatDelegate.setDefaultNightMode(settings.darkMode())
其中 settings.darkMode 是:
val darkValue =
sharedPreferences.getString("PREF_DARK_THEME", null)
return when (darkValue) {
"ON" -> MODE_NIGHT_YES
"OFF" -> MODE_NIGHT_NO
else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MODE_NIGHT_FOLLOW_SYSTEM
} else {
MODE_NIGHT_AUTO_BATTERY
}
}
不过,我想添加对Samsung One UI的“ 夜间模式”的支持。是否可以读取该系统设置?我想做这样的事情:
...
else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MODE_NIGHT_FOLLOW_SYSTEM
} else if("samsung"==Build.MANUFACTURER && isSamsungNightModeEnabled()) {
MODE_NIGHT_YES
} else ...[add other brands]...
} else {
MODE_NIGHT_AUTO_BATTERY
}
答案 0 :(得分:0)
感谢Pawel's comment,这就是我所做的。似乎工作正常。
fun darkMode(sharedPreferences: SharedPreferences, context: Context): Int {
val darkValue =
sharedPreferences.getString("PREF_DARK_THEME", null)
return when (darkValue) {
"ON" -> MODE_NIGHT_YES
"OFF" -> MODE_NIGHT_NO
else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MODE_NIGHT_FOLLOW_SYSTEM
} else {
val nightModeFlags =
context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
when (nightModeFlags) {
Configuration.UI_MODE_NIGHT_YES -> MODE_NIGHT_YES
Configuration.UI_MODE_NIGHT_NO -> MODE_NIGHT_NO
else -> MODE_NIGHT_AUTO_BATTERY
}
}
}
}
我从活动的onResume()方法调用AppCompatDelegate.setDefaultNightMode(darkMode(preferences, this))
,并且在通知面板上修改设备的“夜间模式”后,应用程序会自动更改其主题。在Note 9上进行了测试。