我有一个包含许多项目的导航抽屉,因此用户需要向上和向下滚动才能看到所有项目。
我想减少单个菜单项之间的边距,以便所有项目都适合标准屏幕而无需滚动。
有没有办法控制菜单项之间的边距?
答案 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>