如何以编程方式在第一和第二活动中设置主题?

时间:2019-03-24 14:20:37

标签: java android android-activity

我正在创建具有2个活动的应用,并希望在第一个和第二个活动中设置主题onclick按钮。

方法setTheme()仅在第一次活动时起作用

    if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
        setTheme(R.style.OLEDTheme);
    } else {
        setTheme(R.style.AppTheme);
    }
    Switch oledModeSwitch = (Switch) findViewById(R.id.OLEDSwitch);
    if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
        oledModeSwitch.setChecked(true);
    }
    oledModeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean Check) {
            Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
            finish();
            if (Build.VERSION.SDK_INT >= 21) {
                overridePendingTransition(R.anim.from_alpha, R.anim.to_alpha);
            }
            startActivity(intent);
            if (Check) {
                Toast.makeText(getApplicationContext(), "Тема успешно активирована", Toast.LENGTH_SHORT).show();
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            } else {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                Toast.makeText(getApplicationContext(), "Тема успешно дезактивирована", Toast.LENGTH_SHORT).show();
            }
        }
    });

主题仅设置第一个活动,但我希望在第一个和第二个活动上设置

1 个答案:

答案 0 :(得分:0)

当您致电setTheme()时,它只会更改进行呼叫的Activity的主题。如果要更改整个应用程序的主题,则应在SharedPreferences中记录主题设置,然后在每个Activity中,应从SharedPreferences中读取当前主题并调用{{ 1}}中的那个setTheme()