首页 > 解决方案 > 在抽屉布局中单击菜单项时未找到带有重力 LEFT 错误的抽屉视图

问题描述

每当我单击导航视图中的菜单项时,都不会出现带有重力 LEFT 的抽屉视图。我正在使用自定义应用栏。我正在使用 openDrawer 和 closeDrawer 函数。下面我粘贴代码请帮助我坚持一周。

属性.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".views.enforcement.PropertyActivity">

    <include
        android:id="@+id/header"
        layout="@layout/property_header" />

    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:openDrawer="end">

        <fragment
            android:id="@+id/fragmentContainerView"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:navGraph="@navigation/property_nav" />


        <com.google.android.material.navigation.NavigationView
            android:id="@+id/navigationView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:background="@color/white"
            app:itemBackground="@color/white"
            app:itemIconTint="@color/color_light_blue"
            app:itemTextColor="@color/color_light_blue"
            app:menu="@menu/drawer_menu" />
    </androidx.drawerlayout.widget.DrawerLayout>

</LinearLayout>

属性类

   private fun initView() {
        navController = findNavController(R.id.fragmentContainerView)
        mDrawerLayout =  findViewById<DrawerLayout>(R.id.drawerLayout)
        navigationView.setupWithNavController(navController)
            binding.header.menuIV.setOnClickListener {
            if (mDrawerLayout.isDrawerOpen(GravityCompat.END)) {
                    mDrawerLayout.closeDrawers()
            } else {
                mDrawerLayout.openDrawer(GravityCompat.END)
            }
        }

标签: androiduinavigationcontrollerdrawerlayout

解决方案


您需要明确地使用 closeDrawers(),因为它本质上是 Gravity.START 但您正在调用 Gravity.END。而是调用:

if (mDrawerLayout.isDrawerOpen(GravityCompat.END)) {
    mDrawerLayout.closeDrawer(GravityCompat.END) 
}

推荐阅读