【问题标题】:How To Make Multiple Themes Change Based On Which Toggle Switch Is Turned On如何根据打开的拨动开关更改多个主题
【发布时间】:2018-06-21 15:35:15
【问题描述】:

我正在尝试为我的应用创建主题偏好页面。我已经能够让一个拨动开关工作。当我打开和关闭它时,主题会改变。 I would like to have multiple different themes that can be switch when one of the other toggle switches are selected.我已经对如何实现这一点的任何示例进行了相当广泛的搜索,但似乎找不到任何东西。

我将不胜感激有关此主题的任何指导。下面是所选主题颜色 Banana 的屏幕截图,当我应用 onyx 时,banana 的切换不会关闭,为了恢复我的默认设置,我必须同时关闭 onyx 和banana。

这是我应用主题的 SettingsActivity

public class SettingsActivity extends AppCompatActivity {

private static final String PREFS_NAME = "prefs";
private static final String PREF_BANANA_THEME = "banana_theme";
private static final String PREF_ONYX_THEME = "onyx_theme";

@Override
protected void onCreate(Bundle savedInstanceState) {
    // Use the chosen theme
    SharedPreferences preferences = getSharedPreferences( PREFS_NAME, MODE_PRIVATE );
    boolean useBananaTheme = preferences.getBoolean( PREF_BANANA_THEME, false );
    if (useBananaTheme) {
        setTheme( R.style.AppTheme_Banana_NoActionBar );
    }
    boolean useOnyxTheme = preferences.getBoolean( PREF_ONYX_THEME, false );
    if (useOnyxTheme) {
        setTheme( R.style.AppTheme_Onyx_NoActionBar );
    }
    super.onCreate( savedInstanceState );
    setContentView( R.layout.activity_settings );
    Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
    setSupportActionBar( toolbar );
    Objects.requireNonNull( getSupportActionBar() ).setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getApplicationContext(),MainActivity.class));
            finish();
        }
    });
    Switch toggle1 = (Switch) findViewById( R.id.switch1 );
    toggle1.setChecked( useBananaTheme );
    toggle1.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton view, boolean isChecked) {
            toggleThemeBanana( isChecked );
        }
    } );
    Switch toggle2 = (Switch) findViewById( R.id.switch2 );
    toggle2.setChecked( useOnyxTheme );
    toggle2.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton view, boolean isChecked) {
            toggleThemeOnyx( isChecked );
        }
    } );
}
private void toggleThemeBanana(boolean bananaTheme) {
    SharedPreferences.Editor editor = getSharedPreferences( PREFS_NAME, MODE_PRIVATE ).edit();
    editor.putBoolean( PREF_BANANA_THEME, bananaTheme );
    editor.apply();
    Intent intent = getIntent();
    finish();
    startActivity( intent );
}
private void toggleThemeOnyx(boolean onyxTheme) {
        SharedPreferences.Editor editor = getSharedPreferences( PREFS_NAME, MODE_PRIVATE ).edit();
        editor.putBoolean( PREF_ONYX_THEME, onyxTheme );
        editor.apply();
        Intent intent = getIntent();
        finish();
        startActivity( intent );
    }
}

【问题讨论】:

  • 我已经更新了上面的代码,我已经能够根据打开的切换开关来改变主题。我需要一些帮助来关闭以前使用的主题开关。任何帮助将不胜感激。

标签: java android android-togglebutton


【解决方案1】:

我已经解决了这个问题。我需要将所有切换开关设置为 false。下面是一段 sn-p 代码,展示了这个例子。

final Switch blue = (Switch) findViewById( R.id.blue );
        blue.setChecked( useBlueTheme );
        blue.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {
                toggleThemeBlue(isChecked);
                //toggleThemeBlue(false);
                toggleThemeGreen(false);
                toggleThemeOrange(false);
                toggleThemeRed(false);
                toggleThemeYellow(false);
            }
        } );
        final Switch green = (Switch) findViewById( R.id.green );
        green.setChecked( useGreenTheme );
        green.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {
                toggleThemeGreen(isChecked);
                toggleThemeBlue(false);
                //toggleThemeGreen(false);
                toggleThemeOrange(false);
                toggleThemeRed(false);
                toggleThemeYellow(false);
            }

        } );

我希望这会帮助其他可能正在寻找类似东西的人。

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2021-08-16
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多