Android NavigationView遮挡Activity布局无法滑动关闭问题排查
问题原因
NavigationView常驻覆盖主布局、无法滑动收回,核心是三个DrawerLayout使用规则写错了:
- 子View顺序不符合DrawerLayout要求:DrawerLayout固定规则是第一个子View必须是主内容布局,抽屉层视图要放在主内容之后。你现在把NavigationView放在了主内容LinearLayout前面,DrawerLayout会直接将第一个子View识别为抽屉层,默认铺在最上层。
- 抽屉缺少定位属性:作为抽屉的NavigationView必须显式设置
android:layout_gravity属性,值为start(左侧滑出)或end(右侧滑出),你写的android:foregroundGravity="right"是无效属性,仅作用于控件自身前景,DrawerLayout无法识别抽屉的滑出方向,就会把NavigationView当成普通控件直接铺满展示。 - 抽屉尺寸设置错误:NavigationView高度设为
wrap_content、加了无意义的layout_marginTop="50dp",会导致抽屉显示尺寸异常,无法触发默认的滑动收起逻辑。根节点的tools:openDrawer="start"仅作用于Android Studio预览,不会影响实际运行逻辑。
修复方案
- 调整DrawerLayout内部子View顺序,把主内容LinearLayout移到最前面,NavigationView放在主内容之后。
- 给NavigationView替换无效的
foregroundGravity属性,添加正确的android:layout_gravity属性,同时把高度改为match_parent,删掉多余的顶部margin。 - 你现有的Activity侧滑开关逻辑本身没有问题,布局改完后就能正常通过滑动、Toolbar汉堡按钮控制抽屉展开收起。
修正后的核心布局代码
<?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:fitsSystemWindows="true" android:background="@color/dark_blue" tools:context=".CategoryActivity" tools:openDrawer="start"> <!-- 主内容布局:必须作为DrawerLayout第一个子View --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/dark_blue"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:elevation="4dp"/> <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Categories" android:textColor="#ffffff" android:textSize="30sp" android:textStyle="bold" android:layout_marginStart="130dp"/> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:src="@drawable/hist_bg" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="25dp" android:layout_marginTop="75dp" android:layout_marginEnd="40dp" android:gravity="end" android:text="History" android:textColor="@color/white" android:textSize="25sp" android:textStyle="bold" /> <Button android:id="@+id/bt_hist_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="270dp" android:layout_marginTop="100dp" android:background="@drawable/his_btn" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:src="@drawable/android_bg" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="75dp" android:gravity="start" android:text="Programming" android:textColor="@color/white" android:textSize="25sp" android:textStyle="bold" android:layout_marginStart="20dp"/> <Button android:id="@+id/bt_prog_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="15dp" android:layout_marginTop="100dp" android:background="@drawable/an_btn" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:src="@drawable/allknow_bg" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="25dp" android:layout_marginTop="75dp" android:layout_marginEnd="40dp" android:gravity="end" android:text="Technology" android:textColor="@color/white" android:textSize="25sp" android:textStyle="bold" /> <Button android:id="@+id/bt_tech_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="270dp" android:layout_marginTop="100dp" android:background="@drawable/allknow_btn" /> </RelativeLayout> </LinearLayout> <!-- 抽屉层:放在主内容之后,配置正确的滑出方向 --> <com.google.android.material.navigation.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" app:headerLayout="@layout/nav_header" app:menu="@menu/drawer_menu"> </com.google.android.material.navigation.NavigationView> </androidx.drawerlayout.widget.DrawerLayout>
内容的提问来源于stack exchange,提问作者YakovMashin
相关产品推荐
相关产品推荐

