Папка values-night запускается только при изменении системной темы, а не при изменении темы приложения

Я пытаюсь реализовать переключение между темной и светлой темой. Создал дубликат папки values ​​в values-night и определил два разных цвета для темного и светлого соответственно. Однако пока нажмите кнопку для переключения темы, это не сработает. Вместо этого он работает с выбором темы пользовательского интерфейса системы Android (это означает, что я переключаю тему из меню настроек устройства Android). Я хочу, чтобы она работала, когда я нажимаю переключить тему из своего приложения.

Для переключения темы используется следующий код:

if (isDarkModeOn) {
    System.out.println("Dark mode is on: so disable it");
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    btnTheme.setText("Enable Dark Mode");
} else {
    System.out.println("Dark mode is off: so enable it");
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    btnTheme.setText("Disable Dark Mode");
}
requireActivity().recreate();

Тема приложения также правильно настроена как:

<style name="AppTheme" parent="Theme.AppCompat.DayNight"></style>

Пожалуйста, предложите подходящий способ решения этой проблемы. Заранее спасибо.


person Bishwash    schedule 13.09.2020    source источник
comment
Я использую тему компонентов материала, и она работает, попробуйте. и я думаю, что вам не нужно воссоздавать деятельность, как я знаю.   -  person mmdreza baqalpour    schedule 13.09.2020
comment
он не работает с темой App Compat. Мне нужно заставить его работать с темой App Compat. Основная проблема в том, что он не переключает автоматически цвета из двух разных папок.   -  person Bishwash    schedule 13.09.2020
comment
Сам код кажется правильным, я думаю, проблема в ваших ресурсах. Проверь их. а также я предлагаю определить глобальные атрибуты в вашем основном стиле. (добавить теги для цвета текста и фона)   -  person mmdreza baqalpour    schedule 13.09.2020
comment
Глобальные атрибуты в основном стиле? Как?   -  person Bishwash    schedule 13.09.2020
comment
Я покажу вам образец в виде ответа   -  person mmdreza baqalpour    schedule 13.09.2020
comment
Здравствуйте, вы смогли решить проблему? (сталкивается с чем-то похожим, но только с доступными ресурсами)   -  person Elio Khattar    schedule 23.01.2021


Ответы (2)


Используйте некоторые глобальные атрибуты в своем стиле

 <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/background_color</item>
    <item name="android:textColor">@color/textColor</item>
</style>

Это мое приложение, я использую этот стиль, и оно работает правильно

person mmdreza baqalpour    schedule 13.09.2020
comment
что, если мне нужно определить пользовательский цвет ячейки? т.е. ‹имя элемента = android: cellColor› @ color / cellColor ‹/item›. Здесь android не принимает cellColor, - person Bishwash; 13.09.2020
comment
сделайте это в своем xml, это для глобальной настройки - person mmdreza baqalpour; 13.09.2020
comment
Я использовал android: background = @ color / cellColor в xml, но он работает только с темой устройства Android, то есть не с переключением тем приложения. - person Bishwash; 13.09.2020

AppCompatDelegate.setDefaultNightMode (...) работает только для AppCompatActivity (не работает для Activity или FragmentActivity), поэтому сначала проверьте родительскую активность.

person fvolodimir    schedule 26.04.2021