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

时间:2015-07-21 01:43:23

标签: android menu material-design submenu

当我们定义带有子菜单项的部分的NavigationView时。它左侧将子项与节标题对齐:

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

enter image description here

我尝试添加一个尺寸正确的透明图片来填充:

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

enter image description here

但默认情况下为NavigationView:

  1. 在图标文本
  2. 之间添加固定填充
  3. 在图标本身上执行修复大小
  4. 我找不到如何配置此填充或图标大小。

    问题我们如何更改子项目缩进以使子项更加缩进?

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

2 个答案:

答案 0 :(得分:8)

<强>声明

请参阅我对Noundla关于主要问题的评论,在那里我解释为什么我认为缩进不是正确的方法。

<强>答案

话虽如此,如果你必须有缩进,最简单的方法是用空格填充每个菜单项。这并不理想,但是当有更好的选择时,它很容易实现,理解和替换。它可以与内置的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>

我希望这能节省时间。

答案 1 :(得分:2)

不确定您是否得到了答案,但我遇到了同样的问题并最终使用了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);

   }
}