如何在 Android 中更改 Activity 主抽屉的文本颜色

How to Change the Text Color of Activity Main Drawer in Android

我正在尝试更改 Activity 主抽屉的文本颜色,但找不到更改位置。我想把它换成更浅的颜色(白色)

这是我的 activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>

<group android:checkableBehavior="single">
    <item android:id="@+id/nav_city1" android:icon="@android:drawable/ic_menu_mapmode"
        android:title="Label1" />
    <item android:id="@+id/nav_city2" android:icon="@android:drawable/ic_menu_compass"
        android:title="Label2" />
    <item android:id="@+id/nav_city3" android:icon="@android:drawable/ic_menu_myplaces"
        android:title="Label3" />
    <item android:id="@+id/nav_city4" android:icon="@android:drawable/ic_input_get"
        android:title="Label4" />
</group>

<item android:title="Account">
    <menu>
        <item android:id="@+id/nav_profile" android:icon="@android:drawable/ic_menu_edit"
            android:title="Profile" />
        <item android:id="@+id/nav_settings" android:icon="@android:drawable/ic_menu_manage"
            android:title="Settings" />
    </menu>
</item>

我试过在任何地方插入 android:textColor 但它不起作用。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:textColor="#FFFFFF">

<group android:checkableBehavior="single" android:textColor="#FFFFFF">
    <item android:id="@+id/nav_cities" android:icon="@android:drawable/ic_menu_mapmode"
        android:title="Cities" android:textColor="#FFFFFF"/>

您似乎在使用新的 Android Support Design Library。我没用过。 我觉得你需要一些 Header Layout,它由 TextView 组成,如上面的屏幕截图所示。 稍后在 Java 代码中,您可以访问页眉布局并使用 findViewById() 获取 TextViews.

让我知道它是否有效。

  • 您需要使用
    初始化您想要使用的颜色 ColorStateList 对象。

  • 为每个状态设置颜色后,您可以设置 navitaionView itemTextColor (navigation.setItemTextColor(yourCustomColorStateList);


Here is another related Whosebug questions
Official Android documentation of all the available kind of state

示例: 在 main class

的 onCreate 方法中使用它
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    /**
     * start of code configuration for color of text of your Navigation Drawer / Menu based on state
     */
    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 colorStateList1 = 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 colorStateList2 = new ColorStateList(states, colors);
    navigationView.setItemTextColor(colorStateList1);
    navigationView.setItemIconTintList(colorStateList2);
    /**
     * end of code configuration for color of text of your Navigation Drawer / Menu based on state
     */

您可以通过 xml 实现同样的效果,只需在 NavigationView 中使用 app:itemTextColor

 <android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_height="match_parent"
    android:layout_width="240dp"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    android:background="@color/colorWhite"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/drawer_view"
    app:itemTextColor="@color/colorWhite">

将上面的单行添加到您的 xml 应该适用于您的情况。
希望对您有所帮助!

您可以在 您的 NavigationView

中使用 app:itemTextColor

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFDFE3"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <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"
        <!-- here you can change color of items like this. -->
        app:itemTextColor="@color/colorHeaderBackground"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>