Как я могу изменить тему Android во время выполнения без использования restate ()? - PullRequest
0 голосов
/ 05 апреля 2020

Я уже использую setTheme () в onCreate (), например:

...
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        data = Utility.GetTheme(this);
        if(data.isDarktheme())
            setTheme(R.style.DarkTheme);
        else
            setTheme(R.style.LightTheme);
        setContentView(R.layout.activity_options);
...

Так что, если я использую refreshate () в упражнении:

switch_theme.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                   setTheme(R.style.DarkTheme);
                else
                    setTheme(R.style.LightTheme);
                saveTheme();
                recreate();
            }
        });

Мое приложение зависает, когда я читаю в другом вопросе, что оно переходит в бесконечное число l oop. Есть ли способ исправить это, желательно с сохранением этого setTheme () в начале onCreate ()?

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете использовать AppCompatDelegate.setDefaultNightMode(int), для этого вам нужно использовать тему DayNight, и на свой clickListener вы можете сделать AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) или AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

Вот ссылка это может вам помочь: Невозможно динамически переключаться между режимами в теме DayNight

...