如何在Android中的runtime/event/中使用setIcon更改按钮的图标?

问题描述 投票:0回答:1

我试图创建一个按钮来切换夜间/灯光模式,为此,我首先需要检查用户设备的当前/默认模式并相应地设置按钮的图标和文本,我尝试查找互联网并尝试很多解决方案,但图标似乎根本没有改变。 这是我尝试过的代码片段。

 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”(深色模式),现在我完全困惑为什么图标没有改变,请帮助。谢谢你。

android materialbutton
1个回答
0
投票

我认为调用

recreate()
可能是问题所在,因为它会导致活动重新启动,这可能会重置您的图标更改。尝试删除不必要的
recreate()
调用。

最后,还要检查

R.drawable.lightmode
R.drawable.darkmode
是否存在。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.