改变抽屉式导航栏菜单项的颜色

问题描述:

这是我目前的导航抽屉的样子:改变抽屉式导航栏菜单项的颜色

enter image description here

我把它分成4组。我正在尝试的是给每个组别一个不同的文字颜色。我正在尝试使用SETTINGSFEEDBACKTERMS AND CONDITIONS这两个选项,使其具有较小的字体和略带黑色的颜色。我搜索了,但无法找到个别定制导航抽屉组的方法。这是我写的菜单代码:

<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> 

有没有办法实现呢?

+0

检查这个答案将帮助您http://*.com/a/32114570/2900893 –

+1

没了,已经签这一个。它改变菜单中每个项目的颜色。我正在尝试仅针对一些项目进行更改 - 并非全部。 –

+0

@ user5038993试试这个从strings.xml得到标题,在strings.xml中定义具有不同颜色的字符串。希望它有帮助 –

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

第一种方式:

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 /价值/ styles.xml

<style name="TextAppearance"> 
    <item name="android:textColor">TEXT_COLOR</item> 
    <item name="android:textSize">TEXT_SIZE_in_sp</item> 
</style> 

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

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" /> 
+0

谢谢,但我试图单独更改菜单项的颜色。这就像不同的菜单项具有不同的颜色。 –

您可以使用这一点,如果你想选择MenuItem不同颜色的每个:

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); 
}