如何在菜单项之间控制NavigationView边距

时间:2016-04-29 16:21:46

标签: android

我有一个包含许多项目的导航抽屉,因此用户需要向上和向下滚动才能看到所有项目。

我想减少单个菜单项之间的边距,以便所有项目都适合标准屏幕而无需滚动。

有没有办法控制菜单项之间的边距?

5 个答案:

答案 0 :(得分:7)

答案here帮助我减少了至少在群体之间的空间。我使用了以下维度

<dimen tools:override="true" name="design_navigation_separator_vertical_padding">1dp</dimen>

答案 1 :(得分:4)

在style.xml中创建主题

<style name="NavigationTheme" parent="AppTheme">
    <item name="android:textSize">16sp</item>
    <item name="android:layout_marginBottom">02dp</item>
</style>

在导航抽屉中应用此主题

android:theme="@style/NavigationTheme"

答案 2 :(得分:2)

将其粘贴到styles.xml

<style name="NavigationTheme" parent="AppTheme">
  <item name="android:textSize">16sp</item>
  <item name="android:layout_marginBottom">02dp</item>
</style>

在导航抽屉中将其放在每个项目中:

android:theme="@style/NavigationTheme"

答案 3 :(得分:2)

我们可以创建一个图形并将其设置为 NavigationView的 itemBackground 属性。我将在下面解释:

如果我们浏览 NavigationMenuAdapter ,我们将看到四种类型的项目:

private static final int VIEW_TYPE_NORMAL = 0;
private static final int VIEW_TYPE_SUBHEADER = 1;
private static final int VIEW_TYPE_SEPARATOR = 2;
private static final int VIEW_TYPE_HEADER = 3;

我们要使用的是 VIEW_TYPE_NORMAL 。可以在以下代码中找到向开发人员公开的属性:

case VIEW_TYPE_NORMAL:
      {
        NavigationMenuItemView itemView = (NavigationMenuItemView) holder.itemView;
        itemView.setIconTintList(iconTintList);
        if (textAppearanceSet) {
          itemView.setTextAppearance(textAppearance);
        }
        if (textColor != null) {
          itemView.setTextColor(textColor);
        }
        ViewCompat.setBackground(
            itemView,
            itemBackground != null ? itemBackground.getConstantState().newDrawable() : null);
        NavigationMenuTextItem item = (NavigationMenuTextItem) items.get(position);
        itemView.setNeedsEmptyIcon(item.needsEmptyIcon);
        itemView.setHorizontalPadding(itemHorizontalPadding);
        itemView.setIconPadding(itemIconPadding);
        if (hasCustomItemIconSize) {
          itemView.setIconSize(itemIconSize);
        }
        itemView.setMaxLines(itemMaxLines);
        itemView.initialize(item.getMenuItem(), 0);
        break;
      }

很遗憾,我们没有界面可以在 NavigationMenuItemView 之间添加边距。但是,它允许我们设置背景。因此,我们可以将客户可绘制对象设置为具有特定高度的NavigationView。我们只在该可绘制对象中设置一个高度,例如:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle">
<size android:height="60dp"/>
</shape>

然后将此可绘制对象应用于layout.xml中的 NavigationView ,例如:

   <com.google.android.material.navigation.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:itemBackground="@drawable/bk_menu_item"/>

我知道这不是一个完美的解决方案,但它似乎是唯一适合我的解决方案。

答案 4 :(得分:0)

在dimens.xml <dimen tools:override="true" name="design_navigation_icon_padding">16dp</dimen>

中添加以下代码