为了账号安全,请及时绑定邮箱和手机立即绑定

Android 如何在所有活动中动态更改主题?

Android 如何在所有活动中动态更改主题?

开心每一天1111 2021-05-31 13:35:39
我正在尝试在所有活动中动态切换背景主题。但是目前,我只能让它打开开关所在的当前活动。我尝试了以下方法:使用setTheme于其他活动集的主题,但导致的错误:cannot find symbol method setTheme(int):ConstraintLayout homeActivity = (ConstraintLayout) findViewById(R.id.homeLayout);homeActivity.setTheme(R.style.darktheme);也试过了getTheme,但是报错non-static method getTheme() cannot be referenced from a static context::Resources.Theme theme = super.getTheme();theme.applyStyle(R.style.darktheme,true);请提供有关如何修复这些错误或替代方法的指导。更新,首选项管理器遇到的新问题:这是当前实现的,当切换黑暗主题时应该跨活动显示,但应用程序完全变黑而没有错误:myswitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {        @Override        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {            if (isChecked){                PreferenceManager                        .getDefaultSharedPreferences(DisplaySettingActivity.this)                        .edit()                        .putInt("ActivityTheme", R.style.darktheme)                        .commit();                DisplaySettingActivity.this.recreate();            }
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

您可以尝试创建一个改变主题的 baseActivity,然后子类化该活动并修改您的主题。让我知道它是否有效


查看完整回答
反对 回复 2021-06-02
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

为了扩展 Saham 的答案,这可以通过子类化 Activity 并覆盖 onCreate() 来解决:


public class ThemeChangeActivity extends Activity {


    @Override

    public void onCreate(Bundle savedInstanceState) {

        // Gets the saved theme ID from SharedPrefs, 

        // or uses default_theme if no theme ID has been saved

        int theme = PreferenceManager.getDefaultSharedPreferences(this).getInt("ActivityTheme", R.id.default_theme);

        // Set this Activity's theme to the saved theme

        setTheme(theme);

        // Continue with creation

        super.onCreate(savedInstanceState);

    }

}

现在,从 ThemeChangeActivity 扩展所有要更改主题的活动。每当您想更改活动的主题时,您都可以使用:


PreferenceManager

    .getDefaultSharedPreferences(this)

    .edit()

    .putInt("ActivityTheme", R.id.theme_you_want_to_set)

    .commit();


查看完整回答
反对 回复 2021-06-02
  • 2 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信