1. ホーム
  2. android

[解決済み] ナビゲーションドロワーでチェックしたメニューの色を変更する

2022-09-11 19:39:41

質問

新しいAndroid Design Supportライブラリを使用して、私のアプリケーションにナビゲーションドロワーを実装しています。

選択したアイテムの色を変更する方法がわかりません!

メニューのxmlはこちらです。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_1"
        android:icon="@drawable/ic_1"
        android:title="@string/navigation_item_1"/>

    <item
        android:id="@+id/navigation_item_2"
        android:icon="@drawable/ic_2"
        android:title="@string/navigation_item_2"/>
</group>

そして、これがナビゲーションビューの xml で、これは android.support.v4.widget.DrawerLayout :

<android.support.design.widget.NavigationView
    android:id="@+id/activity_main_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:itemIconTint="@color/black"
    app:itemTextColor="@color/primary_text"
    app:menu="@menu/menu_drawer">

    <TextView
        android:id="@+id/main_activity_version"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:textColor="@color/primary_text" />

</android.support.design.widget.NavigationView>

ありがとうございました。

[EDIT] 私はすでにこのような解決策を見てきました。 アンドロイドメニューの背景色を変更する .

かなりハックされているようで、新しいデザインサポートライブラリで、もっときれいなものが導入されているのでは?

どのように解決するのですか?

これは 色状態リソース . もし、あなたの NavigationView の中で

app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"

ここでは @color/black または @color/primary_test を使用します。 Color State List Resource . そのためには、まず新しい xml (例: drawer_item.xml) の中に作ります。 color ディレクトリの中にあります (本来は res ディレクトリの中にあるはずです)。という名前のディレクトリがない場合は color という名前のディレクトリがなければ、作ってください。

では、内側の drawer_item.xml の中で、次のようなことをします。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="checked state color" android:state_checked="true" />
    <item android:color="your default color" />
</selector>

最後のステップは NavigationView

<android.support.design.widget.NavigationView
    android:id="@+id/activity_main_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:itemIconTint="@color/drawer_item"  // notice here
    app:itemTextColor="@color/drawer_item" // and here
    app:itemBackground="@android:color/transparent"// and here for setting the background color to tranparent
    app:menu="@menu/menu_drawer">

このように、カラーステート・リスト・リソースを別々に使って IconTint , ItemTextColor , ItemBackground .

これで、ある項目をチェック済みにしたとき ( xml またはプログラム的に)、その項目はチェックされていないものと異なる色を持つようになります。