3 回答
![?](http://img1.sycdn.imooc.com/545864190001966102200220-100-100.jpg)
TA贡献2080条经验 获得超4个赞
将更改主题的代码放在 onCreate()/onStart()/onResume() 之外的新函数中
例子:
package ...;
import ..;
public class MainActivity(){
protected void onCreate(){
//...Your code...
}
protected void onStart(){
//...Your code, if you have onStart()...
}
protected void onResume(){
//...Your code, if you have onResume()...
}
changeTheme(int themeMode){
//Add the code as I have told below
}
}
当用户更改单选按钮的状态时调用该函数。
(这很重要,因为即使您不手动更改侦听器也是第一次调用它)。
要检查是否是用户更改了它,而不是 SharedPreferences 中的值,请对单选按钮使用 onClickListener 而不是 onCheckChangedListener。这样您就可以确定用户更改了值而不是 SharedPreferences 中的值。在 OnClickListener 内部,更改单选按钮的状态,以模拟单选按钮的工作,并进行 SharedPreferences 值更新。这只是您提到的问题的解决方法,如果您的应用经常使用单选按钮的状态来执行其他工作,请不要使用它,因为这些嵌套在自身中的侦听器会占用大量空间和 CPU 周期。
![?](http://img1.sycdn.imooc.com/54584cfb0001308402200220-100-100.jpg)
TA贡献1884条经验 获得超4个赞
我自己找到了答案!我不知道怎么做,但我改变了这个
editor.putString("CurrentTheme","Light"); editor.apply();
对此,
editor.putBoolean("CurrentTheme",true); editor.apply();
![?](http://img1.sycdn.imooc.com/5458463b0001358f02200220-100-100.jpg)
TA贡献1777条经验 获得超3个赞
要实现深色/夜间主题,最好使用darktheme功能。
以下代码是其实现示例:
boolean isNight = AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES
viewModel.setThemeStatus(isNight) //save the last state of theme
//to switch between light/dark
AppCompatDelegate
.setDefaultNightMode(isNight ? AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES)
在您的启动器活动中:
boolean isNight = viewModel.getThemeStatus()
AppCompatDelegate.setDefaultNightMode(isNight ? AppCompatDelegate.MODE_NIGHT_NO : AppCompatDelegate.MODE_NIGHT_YES)
添加回答
举报