【问题标题】:How to change the indentation of sub menu items in a NavigationView?如何更改 NavigationView 中子菜单项的缩进?
【发布时间】:2015-10-10 07:31:38
【问题描述】:

当我们定义带有子菜单项的部分的 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>

我尝试将正确大小的透明图像添加到 pad:

<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. 在图标本身上强制修复大小

我找不到如何配置此填充和图标大小。

问题如何改变子项的缩进,让子项的缩进更深?

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

【问题讨论】:

  • 您好,您有解决方案吗?
  • 还没有。自从我发布它以来,我还没有研究过这个。需要结束其他更高优先级的工作。但我开始认为,缩进可能不是更好的设计——毕竟我没有看到 Material Design 指南中推荐它。我将在接下来的几周内再次对此进行调查。所以我会发布一个更新。
  • @Noundla 再次调查后,我没有找到办法。我目前对此的看法是,缩进并没有在 Material Design 指南中得到推广,所以我不认为它是 Android 中的最佳实践,因此我远离它。相反,更好的方法是使用每个菜单行的背景色和前景色来指示分组。我已经看到在许多应用程序中做得很好。仅供参考,我所说的前景色是文本颜色。您还可以集成字体类型以强调分组和状态的不同方面。

标签: android menu material-design submenu


【解决方案1】:

免责声明

请参阅我对 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>

我希望这可以节省一些人的时间。

【讨论】:

    【解决方案2】:

    不确定您是否得到了答案,但我遇到了同样的问题并最终使用了 MaterialDrawer - https://github.com/mikepenz/MaterialDrawer

    您需要扩展SecondaryDrawerItem并在PostBindView上添加填充on bindView

    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);
    
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2018-09-19
      • 2016-02-11
      • 2019-03-22
      • 2015-09-24
      • 2018-10-19
      相关资源
      最近更新 更多