Как изменить тему приложения для Android с помощью SwitchCompat - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу динамически изменить тему моего приложения с помощью SwithCompat, поэтому я реализовал это:

public class SettingsActivity extends AppCompatActivity {

    private final static int THEME_LIGHT = 2;
    private final static int THEME_DARK = 1;

    @BindView(R.id.summary)
    TextView summary;
    @BindView(R.id.themeModeSwitchCompat)
    SwitchCompat themeMode;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        SharedPreferences sharedPreferences = getSharedPreferences("VALUES", MODE_PRIVATE);
        int theme = sharedPreferences.getInt("THEME", 2);
        switch (theme) {
            case 1:
                setTheme(R.style.CustomStyle_DarkTheme);
                break;
            case 2:
                setTheme(R.style.CustomStyle_LightTheme);
                break;
        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);
        ButterKnife.bind(this);

        themeMode.setOnCheckedChangeListener((buttonView, isChecked) -> {
            if (isChecked) {
                summary.setText(getResources().getString(R.string.night_mode_on_summary));
                sharedPreferences.edit().putInt("THEME",1).apply();
            } else {
                summary.setText(getResources().getString(R.string.night_mode_off_summary));
                sharedPreferences.edit().putInt("THEME",2).apply();
            }
        });

    }}

Я хочу знать, почему тема не меняется, и как я могу исправить свой код, чтобы получитьтема, которая динамически меняется с помощью switchCompat

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Попробуйте:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
  initViews()
}

private void initViews() {


    SharedPreferences sharedPreferences = getSharedPreferences("VALUES", MODE_PRIVATE);
    int theme = sharedPreferences.getInt("THEME", 2);
    switch (theme) {
        case 1:
            setTheme(R.style.CustomStyle_DarkTheme);
            break;
        case 2:
            setTheme(R.style.CustomStyle_LightTheme);
            break;
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_activity);
    ButterKnife.bind(this);
    themeMode.setOnCheckedChangeListener(null);
    switch (theme) {
        case 1:
            themeMode.setChecked(true);
            break;
        case 2:
            themeMode.setChecked(false);
            break;
    }
    themeMode.setOnCheckedChangeListener((buttonView, isChecked) -> {
        if (isChecked) {
            summary.setText(getResources().getString(R.string.night_mode_on_summary));
            sharedPreferences.edit().putInt("THEME", 1).apply();
            //Call the onCreate here again to apply the theme again.
            initViews();
        } else {
            summary.setText(getResources().getString(R.string.night_mode_off_summary));
            sharedPreferences.edit().putInt("THEME", 2).apply();
            //Call the onCreate here again to apply the theme again.
            initViews();
        }

    });

}
0 голосов
/ 26 апреля 2019

Создать две разные темы в XML. Вы даже можете создать два разных XML-файла. Как RedTheme.xml и GreenTheme.xml. При создании стиля не забудьте установить родителя как «AppTheme».

<resources>

<style name="RedTheme" parent="AppTheme">
    <item name="colorPrimary">@color/colorRed</item>
    <item name="colorPrimaryDark">@color/colorGreen</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="toolbarNavigationButtonStyle">@style/Toolbar.Button.Navigation.REd</item>
</style>

Теперь при вызове метода setTheme () для setOnCheckedChangeListener, нативный метод для изменения темы во время выполнения.

if(isChecked)
{                
 setTheme(R.style.RedTheme);
} 
else{
 setTheme(R.style.GreenTheme);
}

Внимание! Создайте этот метод в своей основной деятельности. Как только вы примените тему, вам придется заново создать свою деятельность, чтобы отразить изменения.

...