Android 如何禁用手动滑出导航视图

Android 如何禁用手动滑出导航视图,android,navigation-drawer,Android,Navigation Drawer,我的活动中有两个导航视图。一个从右边进入,另一个从左边进入 在从左侧进入的navigtionview中,单击项目时会启动不同的片段。同样,这个navigationview也有菜单项,这些菜单项对于所有启动的片段都是通用的。我对这个没有任何问题 现在,从右侧进入的navigationview有一些菜单项,这些菜单项仅在单击左侧进入navigationview的第一项时启动的特定片段特有。这意味着,当您单击左侧进入导航抽屉中的第一个项目时,将启动fragament,并且右侧进入导航视图中的项目具有与

我的活动中有两个导航视图。一个从右边进入,另一个从左边进入

在从左侧进入的navigtionview中,单击项目时会启动不同的片段。同样,这个navigationview也有菜单项,这些菜单项对于所有启动的片段都是通用的。我对这个没有任何问题

现在,从右侧进入的navigationview有一些菜单项,这些菜单项仅在单击左侧进入navigationview的第一项时启动的特定片段特有。这意味着,当您单击左侧进入导航抽屉中的第一个项目时,将启动fragament,并且右侧进入导航视图中的项目具有与此片段相关的项目

因此,单击工具栏中的菜单项时,右导航视图将启动。当看到其他片段(除上述片段外)时,此菜单项不可见

我遇到的问题是,即使右键进入navigationview无法通过其他片段中的菜单项启动,它仍然可以通过滑动屏幕的右边缘启动。所以我想完全禁用这个右键进入navigationview的滑动功能,这样它只能在单击菜单项时启动

代码 主要活动

 <?xml version="1.0" encoding="utf-8"?>
 <android.support.v4.widget.DrawerLayout
     android:id="@+id/drawer_layout"
     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:fitsSystemWindows="true"
     tools:openDrawer="start">

     <include
         layout="@layout/app_bar_main"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>

     <android.support.design.widget.NavigationView
         android:id="@+id/nav_view"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         android:fitsSystemWindows="false"
         app:headerLayout="@layout/nav_header_main"
         app:menu="@menu/activity_main_drawer"/>

     <android.support.design.widget.NavigationView
         android:id="@+id/cat_nav_view"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="end"
         android:fitsSystemWindows="false">

         /** This navigationview enters from the right, I start a fragment with framelayout below.
         The fragment contains a recyclerview **/

         <FrameLayout
             android:id="@+id/transport_cat_container"
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>

     </android.support.design.widget.NavigationView>

 </android.support.v4.widget.DrawerLayout>
DrawerLayout#setDrawerLockMode()
方法就是您想要的。锁定后,抽屉
视图
无法拖动打开/关闭,尽管它仍会响应
openDrawer()
closeDrawer*()
方法

由于您使用两个抽屉,并且只想锁定其中一个,因此需要使用第二个参数调用该方法以指示要锁定/解锁的抽屉。例如,要关闭辅助抽屉,请执行以下操作:

drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);

我不确定您是否打算从
片段
本身执行此操作,但在任何情况下,都应该有所帮助。
DrawerLayout#setDrawerLockMode()
方法就是您想要的。在您的情况下,您可以使用第二个参数调用它,以指定要锁定/解锁的抽屉;e、 例如,
drawer.setDrawerLockMode(lockMode,GravityCompat.END)
。忽略
ActionBarDrawerToggle
之类的东西,因为它不适用于第二个抽屉。@MikeM。请输入您的评论作为回答?我将它与第二个参数一起使用,它修复了它。
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);