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 (夜) を宣言しました。
ここに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);
上記の行は、アクティビティ ファイルに存在し、ナイト モードになります。
ただし、リサイクラー ビューの色が RED になるたびに、styles.xml から
styles.xml (夜) の色が recyclerview に適用されないのはなぜですか。
なぜ機能しないのですか?またはこれを行う他の方法はありますか?