java - 如何在运行时更改 Android 主题而不使用 recreate()?

标签 java android android-theme

我已经在 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/

相关文章:

android - 带有 "activatedBackgroundIndicator"抽屉导航的所选项目的自定义背景颜色

java - 在 Ubuntu 上为 Open JDK 7 安装 JNLP

java - 为对象组合选择正确的模式

android - 如果 Glide 失败,如何重试图像加载?

android - 列出云端硬盘中的所有文件

android - 在三星上进入搜索模式时应用主题未应用

java - 切换主题

java - 为什么我可以 "fake"Java 异常的堆栈跟踪?

java - 在相对布局中显示 AChartEngine

java - Android 动态 Mqtt 主题未从代理接收消息