Цвет ночного режима не применяется к фону просмотра ресайклера
Я хочу реализовать ночной режим для своего приложения для Android, поэтому я использовал тему Theme.AppCompat.DayNight для реализации ночного режима. Но мне нужно настроить цвет панели инструментов и представления ресайклера в ночном режиме.
Для этого я объявил атрибут в файле attrs.xml и использую этот атрибут в качестве фона в recyclerview.
Вот файл attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ds">
<attr name="rv_color" format="color"/>
</declare-styleable>
</resources>
Вот рециклер
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/rv_color"
android:overScrollMode="never"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
Что касается стилей, я объявил styles.xml и styles.xml (night) для ночного режима.
Вот файл styles.xml
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@android:color/white</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:textColorPrimary">@color/colorPrimary</item>
<item name="android:windowDisablePreview">false</item>
<item name="rv_color">#FF0000</item>
</style>
Вот файл styles.xml (ночь)
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@android:color/white</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:textColorPrimary">@color/colorPrimary</item>
<item name="android:windowDisablePreview">false</item>
<item name="rv_color">#FFFF00</item>
</style>
В файле styles.xml я определил КРАСНЫЙ цвет для фона recyclerview и ЖЕЛТЫЙ цвет в файле ночного режима.
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
Вышеупомянутая строка присутствует в файле Activity, который находится в ночном режиме.
Но каждый раз, когда цвет представления ресайклера КРАСНЫЙ, то есть из файла styles.xml
Почему цвет styles.xml (night) не применяется к recyclerview.
Почему не работает? или любым другим способом сделать это?
3 ответа
У меня была такая же проблема (только у RecyclerView всегда был цвет, определенный в styles.xml (night), независимо от того, был ли активирован дневной или ночной режим), и я нашел решение в этой теме; единственное, что мне пришлось изменить, это не звонить
getApplicationContext()
но использовать
MyActivity.this
вместо этого при создании адаптера с
MyAdapter adapter = new MyAdapter(getApplicationContext(), arrayList);
в соответствующем Activity. Рабочий раствор:
MyAdapter adapter = new MyAdapter(MyActivity.this, arrayList);
Другой способ - создать в ваших ресурсах папку values-night, поместить в нее файл colors.xml и объявить цвет, например "rv_color":
<color name="rv_color">#ffff00</color>
и в обычных значениях /colors.xml:
<color name="rv_color">#ff0000</color>
Установите этот цвет для вашего recyclerview. Нет необходимости объявлять какой-либо настраиваемый атрибут.
Когда я впервые попытался реализовать предложение ondzilla, это не сработало. Однако, когда я установил для фона recyclerview другой цвет, который у меня уже был в файле colors.xml, фон теперь правильно переключается между днем и ночью. Затем я снова переключил его на rv_color, и он работает правильно.
Не знаю, поможет ли это с вашим, но я очень рад, что вы задали этот вопрос, и что мой теперь работает.