Android 更改导航抽屉菜单项的颜色

Android 更改导航抽屉菜单项的颜色,android,navigation-drawer,Android,Navigation Drawer,这是我当前导航抽屉的外观: 我把它分成4组。我所要做的就是给每个小组一个不同的文本颜色。我正在尝试使用设置、反馈和条款和条件等选项,使字体变小,颜色变黑。我搜索了,但找不到一种方法来单独定制导航抽屉组。以下是我为菜单编写的代码: <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/menu" android:checkableBe

这是我当前导航抽屉的外观:

我把它分成4组。我所要做的就是给每个小组一个不同的文本颜色。我正在尝试使用
设置
反馈
条款和条件
等选项,使字体变小,颜色变黑。我搜索了,但找不到一种方法来单独定制导航抽屉组。以下是我为菜单编写的代码:

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


<group
    android:id="@+id/menu"
    android:checkableBehavior="single">

    <item
        android:id="@+id/nav_targets"
        android:icon="@drawable/icon_target"
        android:title="Targets" />

    <item
        android:id="@+id/nav_testing"
        android:icon="@drawable/icon_testing"
        android:title="Testing" />

    <item
        android:id="@+id/nav_course_work"
        android:icon="@drawable/icon_course_work"
        android:title="Course Work" />

    <item
        android:id="@+id/nav_schedule"
        android:icon="@drawable/icon_schedule"
        android:title="Schedule" />

    <item
        android:id="@+id/nav_profile"
        android:icon="@drawable/icon_profile"
        android:title="Profile" />

</group>

<group
    android:id="@+id/settings">
    <item
        android:title="SETTINGS"
        android:id="@+id/settings_item"></item>
</group>

<group
    android:id="@+id/feedback">
    <item
        android:title="FEEDBACK"
        android:id="@+id/feedback_item"></item>
</group>


<group
    android:id="@+id/TnC">
    <item
        android:title="TERMS &#038; CONDITIONS"
        android:id="@+id/t_n_c_item"></item>
</group>


有什么方法可以实现吗?

这应该适用于更改导航抽屉中所有菜单项的颜色。

app:itemTextColor="@android:color/holo_orange_light"
这将在定义导航抽屉的父活动xml文件中定义<代码>android.support.v4.widget.DrawerLayout和
android.support.design.widget.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:layout_marginTop="@dimen/activity_vertical_margin"
        app:headerLayout="@layout/nav_header_home"
        app:itemTextColor="@android:color/holo_orange_light"
        app:menu="@menu/activity_home_drawer" />

有两种方法可以分别自定义导航抽屉菜单项

第一种方式:

MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new ForegroundColorSpan(TEXT_COLOR), 0, s.length(), 0);
s.setSpan(new AbsoluteSizeSpan(TEXT_SIZE_in_dip, true), 0, s.length(), 0);
menuItem.setTitle(s);
MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new TextAppearanceSpan(this, R.style.TextAppearance), 0, s.length(), 0);
menuItem.setTitle(s);
第二种方式:

MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new ForegroundColorSpan(TEXT_COLOR), 0, s.length(), 0);
s.setSpan(new AbsoluteSizeSpan(TEXT_SIZE_in_dip, true), 0, s.length(), 0);
menuItem.setTitle(s);
MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new TextAppearanceSpan(this, R.style.TextAppearance), 0, s.length(), 0);
menuItem.setTitle(s);
res/values/styles.xml


文字颜色
文本大小(单位:sp)

如果要为每个选定的
菜单项使用不同的颜色,可以使用此选项:

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    selectItem(id, item);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

private void selectItem(int id, MenuItem item) {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    switch (id) {
        case R.id.nav_a:
            Fragment newFragment = new FragmentA();
            transaction.replace(R.id.content, newFragment);
            transaction.commit();

            /**
            *Methods to refresh menu (i.e. set all MenuItems to default TextColor) 
            *and to then set TextColor of currently selected MenuItem
            */
            refreshNavMenu();
            setNavMenuItemColor(item, getResources().getColor(R.color.<Your Color>));
            break;
        case R.id.nav_b:
            newFragment = new FragmentB();
            transaction.replace(R.id.content, newFragment);
            transaction.commit();
            refreshNavMenu();
            setNavMenuItemColor(item, Color.BLUE);
            break;
    }
}

private void refreshNavMenu() {
    for (int i = 0; i < navigationView.getMenu().size(); i++) {
        MenuItem item = navigationView.getMenu().getItem(i);
        SpannableString span = new SpannableString(item.getTitle());
        span.setSpan(new ForegroundColorSpan(Color.BLACK), 0, span.length(), 0);
        item.setTitle(span);
    }
}

private void setNavMenuItemColor(MenuItem item, int color) {
    SpannableString span = new SpannableString(item.getTitle());
    span.setSpan(new ForegroundColorSpan(color), 0, span.length(), 0);
    item.setTitle(span);
}
public boolean onNavigationItemSelected(菜单项项){
//处理导航视图项单击此处。
int id=item.getItemId();
选择项目(id,项目);
抽屉。关闭抽屉(重力压缩机启动);
返回true;
}
私有void selectItem(int-id,MenuItem-item){
FragmentTransaction=getSupportFragmentManager().beginTransaction();
开关(id){
案例R.id.nav_a:
Fragment newFragment=新FragmentA();
事务。替换(R.id.content,newFragment);
commit();
/**
*刷新菜单的方法(即将所有菜单项设置为默认文本颜色)
*然后设置当前选定菜单项的TextColor
*/
刷新菜单();
setNavMenuItemColor(item,getResources().getColor(R.color.));
打破
案例R.id.nav_b:
newFragment=newfragmentb();
事务。替换(R.id.content,newFragment);
commit();
刷新菜单();
setNavMenuItemColor(项目,颜色为蓝色);
打破
}
}
私有菜单(){
对于(int i=0;i


检查此答案将对您有所帮助不,已经检查了此答案。它会改变菜单中每个项目的颜色。我只尝试对一些项目进行更改,而不是全部。@user5038993尝试从strings.xml获取标题,并在strings.xml中定义具有不同颜色的字符串。希望如此helps@JagjitSingh,我尝试使用html设置颜色(请参阅答案),但我认为这只适用于文本视图。这对我不起作用。返回了包含html标记的整个字符串。@user5038993发布完整的代码,但我正在尝试分别更改菜单项的颜色。这就像不同的菜单项有不同的颜色。