我试图创建一个按钮来切换夜间/灯光模式,为此,我首先需要检查用户设备的当前/默认模式并相应地设置按钮的图标和文本,我尝试查找互联网并尝试很多解决方案,但图标似乎根本没有改变。 这是我尝试过的代码片段。
val nightFlag = resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)
if(nightFlag==16){
mode.icon = (ContextCompat.getDrawable(this,R.drawable.darkmode))
mode.text = "Night"
recreate()
}
else{
mode.icon = ContextCompat.getDrawable(this,R.drawable.lightmode)
mode.text = "Light"
recreate()
}
另一个
when (nightFlag) {
Configuration.UI_MODE_NIGHT_YES -> {
mode.setIcon(ContextCompat.getDrawable(this,R.drawable.lightmode))
}
Configuration.UI_MODE_NIGHT_NO -> {
mode.setIcon(ContextCompat.getDrawable(this,R.drawable.darkmode))
}
}
nightFlag 在 Logcat 中给出了正确答案“16”(浅色模式)和“32”(深色模式),现在我完全困惑为什么图标没有改变,请帮助。谢谢你。
我认为调用
recreate()
可能是问题所在,因为它会导致活动重新启动,这可能会重置您的图标更改。尝试删除不必要的 recreate()
调用。
最后,还要检查
R.drawable.lightmode
和 R.drawable.darkmode
是否存在。
希望这有帮助。