Я решил эту проблему, проверив логическое значение, заданное для ночной темы, перед настройкой представления контента в onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences nightModeSwitchState = getSharedPreferences("NightModeSwitchState", 0);
mNightModeSwitchState = nightModeSwitchState.getBoolean("NightModeSwitchState", false);
if (mNightModeSwitchState) {
setContentView(R.layout.activity_book_night);
} else {
setContentView(R.layout.activity_book);
}
У меня есть два макета, оба из которых включают tabLayouts. Один из них ссылается на файл стиля для tabLayout, настроенный для цветов ночного режима с темным фоном, а макет ссылается на файл стиля, настроенный на обычные цвета для tablayout.
<style name="CategoryTab" parent="Widget.Design.TabLayout">
<item name="tabIndicatorColor">@android:color/white</item>
<item name="tabSelectedTextColor">@android:color/white</item>
<item name="tabTextAppearance">@style/CategoryTabTextAppearance</item>
<item name="tabBackground">@drawable/tab_regular_theme</item>
<item name="android:textColorSecondary">@android:color/white</item>
</style>
<style name="CategoryTabNight" parent="Widget.Design.TabLayout">
<item name="tabIndicatorColor">@android:color/white</item>
<item name="tabSelectedTextColor">@android:color/white</item>
<item name="tabTextAppearance">@style/CategoryTabTextAppearance</item>
<item name="tabBackground">@drawable/tab_layout_dark_mode</item>
<item name="android:textColorSecondary">@android:color/white</item>
</style>
Файлы стилей ссылаются на различные рисунки, которые управляют цветами фона, как вы можете видеть выше ... и вот рисунки ...
Здесь доступен ночной режим:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/dark_grey" android:state_selected="true"/>
<item android:drawable="@color/dark_grey"/>
</selector>
Вот обычный режим рисования:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/app_bar" android:state_selected="true"/>
<item android:drawable="@color/app_bar"/>
</selector>
Все остальное - это макеты, идентичные, чтобы ничего не испортить, просто изменились файлы стилей для таблиц. Я надеюсь это имеет смысл. Я проверил это, и это работает для меня. Я пробовал так много других вещей, и ничего не получалось. Важно вызвать Shared Preference, чтобы получить значение перед проверкой логического значения. Надеюсь, это кому-нибудь поможет.