【发布时间】:2016-04-29 16:21:45
【问题描述】:
我有一个包含许多项目的导航抽屉,因此用户需要上下滚动才能查看所有项目。
我想减少各个菜单项之间的边距,以便所有项目都适合标准屏幕,无需滚动。
有没有办法控制菜单项之间的边距?
【问题讨论】:
标签: android
我有一个包含许多项目的导航抽屉,因此用户需要上下滚动才能查看所有项目。
我想减少各个菜单项之间的边距,以便所有项目都适合标准屏幕,无需滚动。
有没有办法控制菜单项之间的边距?
【问题讨论】:
标签: android
回答here 帮助我减少了至少组之间的空间。我使用了以下维度
<dimen tools:override="true" name="design_navigation_separator_vertical_padding">1dp</dimen>
【讨论】:
在 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"
【讨论】:
我们可以创建一个drawable并将其设置为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 设置一个客户可绘制对象。我们只在那个drawable中设置了一个高度,比如:
<?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>
然后将此drawable应用到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"/>
我知道这不是一个完美的解决方案,但它似乎是唯一适用于我的解决方案。
【讨论】:
将此粘贴到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"
【讨论】:
在dimens.xml中添加以下代码
<dimen tools:override="true" name="design_navigation_icon_padding">16dp</dimen>
【讨论】: