如何更改NavigationView中子菜单项的缩进?

当我们用包含子菜单项的部分定义NavigationView时。 它左侧将子项与节标题alignment:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="Sub items"> <menu> <item android:title="Sub item 1" /> <item android:title="Sub item 2" /> </menu> </item> </menu> 

在这里输入图像说明

我尝试添加一个正确的大小的透明图像垫:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="Sub items"> <menu> <item android:icon="@drawable/ic_transparent" android:title="Sub item 1" /> <item android:icon="@drawable/ic_transparent" android:title="Sub item 2" /> </menu> </item> </menu> 

在这里输入图像说明

但是默认情况下,NavigationView:

  1. 在图标文本之间添加一个固定的填充
  2. 在图标本身上强制修复大小

我无法find如何configuration此填充和图标大小。

问题如何更改子项缩进以使子项更缩进?

我更喜欢通过属性来清理,而不是插入透明的图像。

Solutions Collecting From Web of "如何更改NavigationView中子菜单项的缩进?"

放弃

在主要问题上看到我对Noundla的评论,我解释了为什么我认为缩进不是正确的方法。

回答

这样说,如果你必须有缩进,最简单的方法是用空格填充每个菜单项。 这是不理想的,但是如果有更好的select,实施,理解和replace是很简单的。 它可以与内置的Android NavigationView一起工作,而无需引入外部库:

这是可以工作的代码示例:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="Sub items"> <menu> <item android:title="&#160;&#160;&#160;&#160;Sub item 1" /> <item android:title="&#160;&#160;&#160;&#160;Sub item 2" /> </menu> </item> </menu> 

我希望这可以节省那里的时间。

不知道如果你有答案,但我有同样的问题,并最终使用MaterialDrawer – https://github.com/mikepenz/MaterialDrawer

您需要扩展SecondaryDrawerItem并在bindView onPostBindView 添加填充。

 drawer = new DrawerBuilder() .withActivity(this) .withHeader(drawerHeader) .withSavedInstance(savedInstanceState) .addDrawerItems( new PrimaryDrawerItem().withName("Item1"), new CustomSecondaryDrawerItem().withName("SubItem1"), new CustomSecondaryDrawerItem().withName("SubItem2") ) .build(); 

CustomDrawerSecondaryItem.java

 public class CustomSecondaryDrawerItem extends SecondaryDrawerItem { @Override public void onPostBindView(IDrawerItem drawerItem, View view) { Context ctx = view.getContext(); int paddingLeft = ctx.getResources().getDimensionPixelSize(R.dimen.drawer_secondary_item_padding_left); view.setPadding(paddingLeft, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom()); super.onPostBindView(drawerItem, view); } }