[英]How can I change Android theme in runtime without using recreate()?
我已经在 onCreate() 中使用setTheme() ,例如:
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
data = Utility.GetTheme(this);
if(data.isDarktheme())
setTheme(R.style.DarkTheme);
else
setTheme(R.style.LightTheme);
setContentView(R.layout.activity_options);
...
因此,如果我在活动中使用 recreate() :
switch_theme.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
setTheme(R.style.DarkTheme);
else
setTheme(R.style.LightTheme);
saveTheme();
recreate();
}
});
当我在另一个问题中读到它进入无限循环时,我的应用程序冻结了。 有什么办法可以解决这个问题,最好将 setTheme() 保留在 onCreate() 的开头?
您可以使用AppCompatDelegate.setDefaultNightMode(int)
因为您需要使用DayNight
主题,在您的 clickListener 上您可以执行AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
或AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
这是一个可以帮助您的链接: 无法在 DayNight 主题中动态切换模式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.