Android自定义导航Drawer:菜单布局内容偏移居左问题求助
解决Android导航Drawer自定义布局右移问题
问题根源
NavigationView的菜单item默认会保留左侧图标的占位空间(哪怕没设置图标),同时自带水平内边距,这会导致自定义布局整体右移。另外自定义布局里的标题TextView设置了layout_weight="1",会拉伸占据剩余空间,也会影响视觉上的靠左效果。
具体修改步骤
- 调整NavigationView的属性
在你的Drawer布局中,给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" app:menu="@menu/你的菜单文件名" app:itemHorizontalPadding="0dp" app:itemIconPadding="0dp" android:paddingStart="0dp"/>
- 修改自定义菜单布局(menu_item_with_badge)
移除标题TextView的layout_weight="1",避免标题拉伸;同时微调margin让徽章和标题保持合理间距:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="start|center_vertical" android:padding="16dp"> <TextView android:id="@+id/menu_item_title_new" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="News" android:textColor="@android:color/black" android:textSize="18sp" android:textStyle="bold" android:layout_gravity="center_vertical"/> <TextView android:id="@+id/menu_item_badge1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/circle_red" android:text="2" android:textColor="@android:color/white" android:textSize="12sp" android:padding="4dp" android:layout_gravity="center_vertical" android:gravity="center" android:visibility="visible" android:layout_marginStart="8dp"/> </LinearLayout>
- 优化菜单配置文件
移除app:showAsAction="always"(该属性用于ActionBar按钮,Drawer菜单不需要),同时补全其他item的标题:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_home" android:visible="true" android:title="Home"/> <item android:id="@+id/nav_news" android:title="" android:actionLayout="@layout/menu_item_with_badge"/> <item android:id="@+id/nav_info" android:title="Info"/> <item android:id="@+id/nav_website" android:title="Website"/> </group> </menu>
完成以上修改后,自定义菜单的内容就会靠左对齐,和示例图样式一致。
内容的提问来源于stack exchange,提问作者Susheel Singh
相关产品推荐
相关产品推荐

