Javaを使用して、ナビゲーションドロワーで選択したメニュー項目のテキストとアイコンの色をプログラムで変更する方法 質問する

Javaを使用して、ナビゲーションドロワーで選択したメニュー項目のテキストとアイコンの色をプログラムで変更する方法 質問する

私は Android 開発の初心者です。Android のデフォルトのナビゲーション ドロワー アクティビティを使用してアプリケーションを開発しています。このアプリの要件の 1 つは、実行時にレイアウトの背景色 (ナビゲーション ドロワー ヘッダーの色を含む) をランダムに変更することです。

ナビゲーションドロワーで選択したメニュー項目の色を除いて、すべて正常に動作しています。。 このような :

ここに画像の説明を入力してください

私が今望んでいるのは、他のレイアウトの背景色がピンクなので、ナビゲーション バーで選択されたメニュー項目もピンク (つまり、テキストの色とアイコンがピンク) になるようにすることです。次のようになります。

ここに画像の説明を入力してください

実行時に選択したテキストとアイコンの色をランダムに変更する必要があるため、コード内でプログラム的にこれを実現する方法を教えてください。

参考までにメニューの XML ファイルを以下に示します。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">


    <group android:checkableBehavior="single">
        <item
                android:id="@+id/nav_quiz_all"
                android:icon="@drawable/ic_public_black_24dp"
                android:checked="true"
                android:title="All Countries Quiz"/>
        <item
                android:id="@+id/nav_quiz_bookmarked"
                android:icon="@drawable/ic_favorite_black_24dp"
                android:title="Favorite Quiz"/>
    </group>


    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_rate"
                android:icon="@drawable/ic_star_black_24dp"
                android:title="Rate this app"/>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_share_black_24dp"
                android:title="Share"/>
            <item
                android:id="@+id/nav_feedback"
                android:icon="@drawable/ic_feedback_black_24dp"
                android:title="Feedback"/>
            <item
                android:id="@+id/nav_about"
                android:icon="@drawable/ic_info_black_24dp"
                android:title="About"/>
        </menu>
    </item>


    <item
        android:id="@+id/nav_settings"
        android:icon="@drawable/ic_settings_black_24dp"
        android:title="Settings"/>

</menu>

ベストアンサー1

まず、以下のNavigationViewを確認してください

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/white"
        app:itemIconTint="@drawable/drawer_item_color"
        app:itemTextColor="@drawable/drawer_item_color"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

ここで2つのことを確認してください

app:itemIconTint="@drawable/drawer_item_color"
app:itemTextColor="@drawable/drawer_item_color"

これら両方のタグは、drawer_item_color.xmldrawableフォルダ内のセレクタを使用しており、以下はそのコードです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/pink" android:state_checked="true" />
    <item android:color="@color/black" />
</selector>

セレクターを使用して、必要な色を追加します。これで作業は完了です。

おすすめ記事