我正在尝试使用两个组的导航视图,其中第一组textColor为黑色,第二组为lightGrey。
我似乎只能在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 :(得分:0)
好的,这可行,但它真的很脏。 i [0]&lt; 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;
}
});