如何根据打开的拨动开关更改多个主题
How To Make Multiple Themes Change Based On Which Toggle Switch Is Turned On
我正在尝试为我的应用程序创建一个主题首选项页面。我已经能够让一个拨动开关工作。当我打开和关闭它时,主题会改变。我希望有多个不同的主题可以在选择其他切换开关之一时切换。我已经对如何完成此操作的任何示例进行了相当广泛的搜索,但似乎找不到任何东西。
我将不胜感激有关此主题的任何指导。下面是所选主题颜色 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 );
}
}
我已经想通了这个问题。我需要将所有切换开关设置为 false。下面是一段代码,展示了这方面的一个例子。
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);
}
} );
我希望这对可能正在寻找类似内容的其他人有所帮助。
我正在尝试为我的应用程序创建一个主题首选项页面。我已经能够让一个拨动开关工作。当我打开和关闭它时,主题会改变。我希望有多个不同的主题可以在选择其他切换开关之一时切换。我已经对如何完成此操作的任何示例进行了相当广泛的搜索,但似乎找不到任何东西。
我将不胜感激有关此主题的任何指导。下面是所选主题颜色 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 );
}
}
我已经想通了这个问题。我需要将所有切换开关设置为 false。下面是一段代码,展示了这方面的一个例子。
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);
}
} );
我希望这对可能正在寻找类似内容的其他人有所帮助。