Как изменить несколько тем в зависимости от того, какой тумблер включен
Я пытаюсь создать страницу настроек темы для моего приложения. Я был в состоянии заставить один тумблер работать. Тема меняется при включении и выключении. Я хотел бы иметь несколько разных тем, которые можно переключать при выборе одного из других тумблеров. Я провел довольно обширный поиск любых примеров того, как это будет сделано, но, похоже, ничего не могу найти.
Буду признателен за любые указания по этому вопросу. Ниже приведен снимок экрана с выбранным цветом темы "Банан", когда я применяю к ним оникс, переключатель банана не отключается, и чтобы вернуться к настройкам по умолчанию, я должен отключить и оникс, и банан.
Вот мои настройки деятельности, где я применяю тему
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 );
}
}
1 ответ
Я понял эту проблему. Мне нужно было установить все переключатели в положение 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);
}
} );
Я надеюсь, что это поможет кому-то еще, кто может искать что-то подобное.