2016-03-03 131 views
4

這是我目前的導航抽屜的樣子:改變抽屜式導航欄菜單項的顏色

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://stackoverflow.com/a/32114570/2900893 –

+1

沒了,已經籤這一個。它改變菜單中每個項目的顏色。我正在嘗試僅針對一些項目進行更改 - 並非全部。 –

+0

@ user5038993試試這個從strings.xml得到標題,在strings.xml中定義具有不同顏色的字符串。希望它有幫助 –

回答

17

有兩種方法可以分別定製導航抽屜菜單項。

第一種方式:

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

這應該用於更改導航抽屜中的所有菜單項顏色。

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

謝謝,但我試圖單獨更改菜單項的顏色。這就像不同的菜單項具有不同的顏色。 –

1

您可以使用這一點,如果你想選擇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); 
}