web-dev-qa-db-ja.com

ナビゲーションドロワーのメニュー項目のテキストの色を変更する

私はアプリに夜のテーマを追加しようとしていますが、ナビゲーションドロワーのテキストとアイコンを暗い背景と一緒に白くしようとして3時間近く無駄にしています。 MainActivity.JavaonCreate()でこれを実行しようとしている方法を次に示します。

navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

    // This method will trigger onItemClick of navigation menu
    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {

        // Checking if the item is in checked state or not, if not make it in checked state
        if (menuItem.isChecked())
            menuItem.setChecked(false);
        else menuItem.setChecked(true);

        if (nightMode == 0) {
            SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
            spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); // fix the color to white
            menuItem.setTitle(spanString);
        }

nightModeブール値は機能するため、無関係です。夜間モードがオン(0)に設定されている場合、ナビゲーションドロワーで選択されているメニュー項目はすべて白に変わります。ただし、これは各アイテムが選択されたときにのみ発生し、明らかに不便です。これが私のdrawer_dark.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/unitone"
            Android:checked="true"
            Android:icon="@drawable/one_white"
            Android:title="Classical Period" />
        <item
            Android:id="@+id/unittwo"
            Android:checked="false"
            Android:icon="@drawable/two_white"
            Android:title="Postclassical Period" />
        <item
            Android:id="@+id/unitthree"
            Android:checked="false"
            Android:icon="@drawable/three_white"
            Android:title="Early Modern Era" />
        <item
            Android:id="@+id/unitfour"
            Android:checked="false"
            Android:icon="@drawable/four_white"
            Android:title="Dawn of Industrial Age" />
        <item
            Android:id="@+id/unitfive"
            Android:checked="false"
            Android:icon="@drawable/five_white"
            Android:title="Modern Era" />
    </group>
</menu>

各アイテムの透明な背景に白いアイコンを使用していますが、ナビゲーションドロワーの黒い背景に黒で表示されます。テキストの色を変更するためのxmlソリューションを探してみましたが、なぜこれが見落とされたのかわからないので頭を掻いています。

誰かが私が達成しようとしているものを手に入れる動的なソリューションを提供できますか?すべての助けに感謝します、ありがとう!

編集:私はサードパーティのライブラリを使用していません、それはサポートライブラリで提供されるNavigationViewです。 XMLレイアウトは次のとおりです。

<Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/drawer"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:elevation="7dp"
    tools:context=".MainActivity"
    Android:fitsSystemWindows="true" >

    <FrameLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <FrameLayout
            Android:id="@+id/container"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="@color/ColorDark" />

        <include layout="@layout/toolbar" />

    </FrameLayout>

    <Android.support.design.widget.NavigationView
        Android:id="@+id/navigation_view"
        Android:background="#000"
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"
        Android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:menu="@menu/drawer" />

</Android.support.v4.widget.DrawerLayout>
74
wasimsandhu

NavigationViewにはsetItemTextColor()というメソッドがあります。 ColorStateListを使用します。

// FOR NAVIGATION VIEW ITEM TEXT COLOR
int[][] state = new int[][] {
        new int[] {-Android.R.attr.state_enabled}, // disabled
        new int[] {Android.R.attr.state_enabled}, // enabled
        new int[] {-Android.R.attr.state_checked}, // unchecked
        new int[] { Android.R.attr.state_pressed}  // pressed

};

int[] color = new int[] {
        Color.WHITE,
        Color.WHITE,
        Color.WHITE,
        Color.WHITE
};

ColorStateList csl = new ColorStateList(state, color);


// FOR NAVIGATION VIEW ITEM ICON COLOR
int[][] states = new int[][] {
        new int[] {-Android.R.attr.state_enabled}, // disabled
        new int[] {Android.R.attr.state_enabled}, // enabled
        new int[] {-Android.R.attr.state_checked}, // unchecked
        new int[] { Android.R.attr.state_pressed}  // pressed

};

int[] colors = new int[] {
        Color.WHITE,
        Color.WHITE,
        Color.WHITE,
        Color.WHITE
};

ColorStateList csl2 = new ColorStateList(states, colors);

ここ はその答えを得た場所です。そして、NavigationViewを割り当てた直後:

if (nightMode == 0) {
            navigationView.setItemTextColor(csl);
            navigationView.setItemIconTintList(csl2);
        }
27
wasimsandhu
 <Android.support.design.widget.NavigationView
        Android:id="@+id/navigation_view"
        Android:background="#000"
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"
        Android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:itemTextColor="your color"
        app:menu="@menu/drawer" />
203
Neha Tyagi

NavigationView、ejでapp:itemIconTintを使用します。

<Android.support.design.widget.NavigationView
    Android:id="@+id/nav_view"
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    app:itemTextColor="@color/customColor"
    app:itemIconTint="@color/customColor"
    Android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_home"
    app:menu="@menu/activity_home_drawer" />
37
icortesi

より多くのオプション:

「textColorSecondary」をオーバーライドしてグループのタイトルを変更することもできます

あなたのstyles.xmlで

<style name="AppTheme.NavigationView">
    <item name="Android:textColorSecondary">#FFFFFF</item>
</style>

あなたのレイアウトで

<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"
    app:menu="@menu/activity_main_menu_drawer_drawer"
    Android:theme="@style/AppTheme.NavigationView"
    app:itemIconTint="@color/colorPrimary"
    app:itemTextColor="@color/white"/>
11

app:itemTextColor = "#fff"をNavigationViewに追加します

 <Android.support.design.widget.NavigationView
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    app:menu="@menu/slider_menu"
    Android:background="@color/colorAccent"
    app:itemTextColor="#fff"
    Android:id="@+id/navigation_view"
    Android:layout_gravity="start"/>
8
saigopi

以下のコードを使用して、アプリのナビゲーションドロワーのテキストの色を変更しました。

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setItemTextColor(ColorStateList.valueOf(Color.WHITE));
5

これは私のために動作します。 customThemeの代わりに、テーマをスタイルに追加できます。このコードでは、フォントとテキストサイズも変更できます。

    <style name="MyTheme.NavMenu" parent="CustomTheme">
            <item name="Android:textSize">16sp</item>
            <item name="Android:fontFamily">@font/ssp_semi_bold</item>
            <item name="Android:textColorPrimary">@color/yourcolor</item>
        </style>

これが私のナビゲーションビューです

<Android.support.design.widget.NavigationView
        Android:id="@+id/navigation_view"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:fitsSystemWindows="true"
        app:theme="@style/MyTheme.NavMenu"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer">

        <include layout="@layout/layout_update_available"/>

    </Android.support.design.widget.NavigationView>
3
Chandan Singh

Javaクラスでこれを試してください

yourNavigationView.setItemTextColor(new ColorStateList(
            new int [] [] {
                    new int [] {Android.R.attr.state_pressed},
                    new int [] {Android.R.attr.state_focused},
                    new int [] {}
            },
            new int [] {
                    Color.rgb (255, 128, 192),
                    Color.rgb (100, 200, 192),
                    Color.WHITE
            }
    ));
3
DRM

今後、ナビゲーションドロワーアクティビティ(アクティビティプロンプトウィンドウでStudioが提供)を使用してここに来た場合

答えは-

MainActivityのOnCreate()の前にこれを使用します

int[][] state = new int[][] {
        new int[] {Android.R.attr.state_checked}, // checked
        new int[] {-Android.R.attr.state_checked}
};

int[] color = new int[] {
        Color.rgb(255,46,84),
        (Color.BLACK)
};

ColorStateList csl = new ColorStateList(state, color);

int[][] state2 = new int[][] {
        new int[] {Android.R.attr.state_checked}, // checked
        new int[] {-Android.R.attr.state_checked}
};

int[] color2 = new int[] {
        Color.rgb(255,46,84),
        (Color.GRAY)
};

ColorStateList csl2 = new ColorStateList(state2, color2);

mainActivityのonNavigationItemSelected()でこれを使用します(Navigation Drawerアクティビティを使用する場合、この関数を記述する必要はありません。MainActivityに追加されます)。

 NavigationView nav = (NavigationView) findViewById(R.id.nav_view);
    nav.setItemTextColor(csl);
    nav.setItemIconTintList(csl2);
    nav.setItemBackgroundResource(R.color.white);

ヒント-onNavigationItemSelected()のIf else Conditionの前にこのコードを追加します

3
Chirag Joshi

テーマをナビゲーションビューに追加するだけで実行できます。

    <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/colorPrimary"
    Android:theme="@style/AppTheme.NavigationView"
    app:headerLayout="@layout/nav_header_drawer"
    app:menu="@menu/activity_drawer_drawer"/>

そして、style.xmlファイルに、このテーマを追加します

   <style name="AppTheme.NavigationView" >
    <item name="colorPrimary">@color/text_color_changed_onClick</item>
    <item name="Android:textColorPrimary">@color/Your_default_text_color</item>
</style>
3
Babar Shamsi

これは助けになるかもしれません

Activity_ "navigation activity name"に移動しますNavigationView内にこのコードを挿入します

app:itemTextColor="color of your choice"
2
Dhyan V

ベーステーマから派生したカスタムテーマを定義することもできます。

<Android.support.design.widget.NavigationView
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:id="@+id/nav_view"
        app:headerLayout="@layout/nav_view_header"
        app:menu="@layout/nav_view_menu"
        app:theme="@style/MyTheme.NavMenu" />

次に、styles.xmlファイルで:

  <style name="MyTheme.NavMenu" parent="MyTheme.Base">
    <item name="Android:textColorPrimary">@color/yourcolor</item>
  </style>

カスタムテーマにさらに属性を適用することもできます。

1
Vahid Amiri
 <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"
        app:itemBackground="@drawable/drawer_item_bg"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/app_home_drawer" />

App:itemBackgroundを使用してアイテムの背景を設定するには

drawer_item_bg.xml

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="rectangle" >
            <solid Android:color="@Android:color/transparent" />
        </shape>
    </item>
    <item Android:top="-2dp" Android:right="-2dp" Android:left="-2dp">
        <shape>
            <padding Android:bottom="0dp" Android:left="15dp" Android:right="0dp" Android:top="0dp"/>
            <solid Android:color="@Android:color/transparent" />
            <stroke
                Android:width="0.5dp"
                Android:color="#CACACA" />
        </shape>
    </item>
</layer-list>

itemIconTint、アイコンの色を変更したい場合

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"
            app:itemTextColor="@color/colorPrimary"
            app:itemIconTint="@color/colorPrimary"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer" />
0
user3036876