2016-04-28 75 views
0

我想要有一个导航视图,其中第一组textColor是黑色,第二组是lightGrey。Android NavigationView双文本颜色

我似乎只能在NavigationView xml配置中指定一种颜色。

有没有办法来覆盖这种行为?

我的导航视图菜单:

<group 
    android:id="@+id/navGroupMain" 
    android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_dashboard" 
     android:icon="@drawable/ic_dashboard" 
     android:title="@string/navigation_drawer_item_dashboard" /> 
</group> 

<group 
    android:id="@+id/navGroupFooter" 
    android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_settings" 
     android:icon="@drawable/ic_settings" 
     android:title="@string/navigation_drawer_item_settings" /> 
</group> 

这是插入NavigationView

<style name="AppTheme.ThemeOverlay.NavigationView" parent="ThemeOverlay.AppCompat.Light"> 
    <!-- This is the menu item text color. --> 
    <item name="android:textColorPrimary">@color/black</item> 
    <!-- This is the menu header text color and icon color. --> 
    <item name="android:textColorSecondary">@color/grey_500</item> 
    <!-- This is the selected color. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
</style> 
+0

文章最后一段代码,请 – Haroon

+0

我的代码工作,请接受它的答案! –

回答

0

好这部作品主题,但它是非常脏。 i [0] < 16表示它应该只更改前4项的背景。

将它添加到您的onCreate方法

LayoutInflater layoutInflater = getLayoutInflater(); 
     try { 
      Field field = LayoutInflater.class.getDeclaredField("mFactorySet"); 
      field.setAccessible(true); 
      field.setBoolean(layoutInflater, false); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } 
     final int[] i = {0}; 
     LayoutInflaterCompat.setFactory(getLayoutInflater(), new LayoutInflaterFactory() { 
      @Override 
      public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { 
       i[0]++; 
       if (i[0] < 16 && name .equalsIgnoreCase("android.support.design.internal.NavigationMenuItemView")) { 
        try{ 
         LayoutInflater f = getLayoutInflater(); 
         final View view = f.createView(name, null, attrs); 
         new Handler().post(new Runnable() { 
          public void run() { 
           // set the background drawable 
           view .setBackgroundColor(Color.CYAN); 

          } 
         }); 
         return view; 
        } catch (InflateException e) { 
        } catch (ClassNotFoundException e) {} 
       } 
       return null; 
      } 
     });