3

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 に適用されないのはなぜですか。

なぜ機能しないのですか?またはこれを行う他の方法はありますか?

4

3 に答える 3

7

私は同じ問題を抱えていました (昼モードまたは夜モードがアクティブになっているかどうかに関係なく、RecyclerView は常に styles.xml (夜) で定義された色を持っていました)、このスレッドで解決策を見つけました。私が変えなければならなかった唯一のことは、電話をかけないことでした

getApplicationContext() 

しかし、使用する

MyActivity.this 

代わりに、アダプタを作成するときに

MyAdapter adapter = new MyAdapter(getApplicationContext(), arrayList);

対応するアクティビティで。作業ソリューション:

MyAdapter adapter = new MyAdapter(MyActivity.this, arrayList);
于 2020-03-23T18:40:26.237 に答える