【发布时间】: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