如何为Navigation Drawer的Communicate分类项添加左侧额外间距?
要给Communicate分类下的子菜单项添加左侧额外间距,这里提供两种实用方案:
方法一:自定义菜单项布局(精准控制单个分类)
- 创建自定义子菜单项布局文件(例如
layout/nav_submenu_item.xml),直接在布局中设置左侧内边距:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingStart="48dp" <!-- 按需调整左侧间距数值 --> android:paddingVertical="16dp"> <ImageView android:id="@+id/submenu_icon" android:layout_width="24dp" android:layout_height="24dp" android:layout_marginEnd="16dp"/> <TextView android:id="@+id/submenu_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp"/> </LinearLayout>
- 修改你的menu配置文件,为
Communicate下的子菜单项指定自定义布局:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_import" android:icon="@drawable/ic_menu_camera" android:title="@string/menu_import" /> <item android:id="@+id/nav_gallery" android:icon="@drawable/ic_menu_gallery" android:title="@string/menu_gallery" /> <item android:id="@+id/nav_slideshow" android:icon="@drawable/ic_menu_slideshow" android:title="@string/menu_slideshow" /> <item android:id="@+id/nav_tools" android:icon="@drawable/ic_menu_manage" android:title="@string/menu_tools" /> </group> <item android:title="@string/communicate"> <menu> <item android:id="@+id/nav_share" android:icon="@drawable/ic_menu_share" android:title="@string/menu_share" android:layout="@layout/nav_submenu_item"/> <item android:id="@+id/nav_send" android:icon="@drawable/ic_menu_send" android:title="@string/menu_send" android:layout="@layout/nav_submenu_item"/> </menu> </item> </menu>
- 绑定自定义布局的控件(保持图标和文字的显示):
NavigationView navView = findViewById(R.id.nav_view); Menu communicateSubMenu = navView.getMenu().findItem(R.id.communicate).getSubMenu(); for (int i = 0; i < communicateSubMenu.size(); i++) { MenuItem item = communicateSubMenu.getItem(i); View itemView = item.getActionView(); if (itemView != null) { ImageView icon = itemView.findViewById(R.id.submenu_icon); TextView title = itemView.findViewById(R.id.submenu_title); icon.setImageDrawable(item.getIcon()); title.setText(item.getTitle()); } }
方法二:通过主题样式批量调整(所有子菜单生效)
如果不需要单独控制某一个分类,可直接通过主题修改所有子菜单的缩进:
- 在
styles.xml中定义子菜单样式:
<style name="NavSubmenuStyle" parent="Widget.AppCompat.PopupMenu"> <item name="android:paddingStart">32dp</item> <!-- 全局子菜单左侧缩进量 --> </style>
- 在
NavigationView的布局中引用该样式:
<com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" app:subMenuTheme="@style/NavSubmenuStyle"/>
内容的提问来源于stack exchange,提问作者TopaZ
相关产品推荐
相关产品推荐

