我已经在 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);
...
因此,如果我在 Activity 中使用 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)
这里是一个可以帮助您的链接:Cannot switch between modes in DayNight theme dynamically
关于java - 如何在运行时更改 Android 主题而不使用 recreate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61035786/