pep*_*umo 2 android miui xiaomi android-darkmode
我已经看到了有关检测暗模式就像许多问题这一个在堆栈溢出,并参观了许多媒体的博客喜欢如何当你使用暗模式编程了解和DayNight -添加一个黑暗的主题,你的应用程序,并在所有这些他们执行像这样的支票:
fun isNightModeEnabled(context: Context): Boolean =
context.resources.configuration.uiMode.and(UI_MODE_NIGHT_MASK) ==
UI_MODE_NIGHT_YES
Run Code Online (Sandbox Code Playgroud)
这适用于任何手机,甚至运行 Android One 的小米手机,但不适用于运行 MIUI 的小米智能手机。
对于运行 MIUI 的小米设备:
context.resources.configuration.uiMode = 17
和context.resources.configuration.uiMode.and(UI_MODE_NIGHT_MASK)=16
相比之下,UI_MODE_NIGHT_YES (32)启用或禁用暗模式时总是返回 false。
是否真的可以检测到此类设备已强制启用暗模式?
经过多次测试,我发现它仅在尝试通过执行以下操作禁用暗模式时失败:
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
Run Code Online (Sandbox Code Playgroud)
在那种情况下,该方法错误地返回它不在黑暗模式下。所以我所做的是在应用程序主题上也强制禁用暗模式:
<item name="android:forceDarkAllowed">false</item>
Run Code Online (Sandbox Code Playgroud)
这确实停止了带有 MIUI 的设备的暗模式。
如果您不想禁用暗模式,则通过前面提到的方式检测当前主题应该不会有问题:
val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
when (currentNightMode) {
Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme
Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme
}
Run Code Online (Sandbox Code Playgroud)
这是文档中描述的那个
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |