禁用在Android中打开导航抽屉的滑动手势


Answers:


438

您应该使用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

它对我有用,打开抽屉的滑动被禁用。

如果仍然无法使用,请查看此处提供的答案。


1
你确定吗?我试过了,但都被禁止打开和关闭。我正在使用ActionBarSherlock框架在android 2.3x上进行测试。
thanhnh 2013年

94
需要说明的是:DrawerLayout.LOCK_MODE_LOCKED_OPEN将抽屉锁定为打开状态,以便用户无法隐藏它。DrawerLayout.LOCK_MODE_LOCKED_CLOSED将抽屉锁定为关闭状态,以便用户无法打开它。最后,DrawerLayout.LOCK_MODE_UNLOCKED解锁抽屉,以便可以打开或关闭抽屉。
egfconnor 2013年

4
如果您还没有mDrawerLayout,请进行以下设置:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
史蒂夫·里德尔

4
但是,如果我们只想用应用程序图标控制打开/关闭而不刷卡怎么办?有没有办法做到这一点?我很好奇,因为我正在尝试实现新的ToolBar(API 21)并使用SlidingTabLayout它具有的功能,该功能与我的Nav冲突。抽屉刷卡。所以我宁愿禁用Nav。抽屉式滑轨有利于ToolBar滑动功能。
Azurespot'2

2
这会禁用整个抽屉(例如,图标不再起作用),而不仅是刷卡,因此没有回答问题-特别是指刷卡
HelloWorld

101

要锁定,您可以执行以下操作:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

对于解锁:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

感谢您用LOCK_MODE_UNLOCKED标志阐明接受的答案
Mattia Ruggiero

1
我认为这比公认的答案更好,因为它还引入了相反的方法
TheWhiteLlama

如果我使用了mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 为了锁定它关闭了抽屉,所以为了锁定我使用了mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi

15

使用setDrawerLockMode()也要添加重力值;

做这个 :

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

这应该像一个魅力


2
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 锁定Drawer和抽屉布局.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,GravityCompat.END); 代表您要锁定的抽屉,谢谢,它为我工作,并节省了我的时间。
Sanjeev Sangral,

在当前的源中,左3和右5看起来都可以按预期工作,但是GravityCompat.END不能正常工作。
ProjectJourneyman

6

要禁用刷卡功能,请覆盖onInterceptTouchEventonTouchEvent启用,DrawerLayout然后让它们返回false。


这是正确的答案。让我在答案中再详细说明一下。
马丁·维斯尼

4

禁用刷卡的答案是正确的。我认为LOCK_MODE_LOCKED_CLOSED在Compat 24.x中可以使用,但是功能已在较新的compat库中进行了更改,并且LOCK_MODE_LOCKED_CLOSED现在完全阻止了导航菜单的显示,即使通过使用汉堡菜单也是如此。

以下课程为我(科特琳)工作:

class MyDrawerLayout(ctx: Context) : DrawerLayout(ctx) {
  var isSwipeOpenEnabled: Boolean = true

  override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
      if (!isSwipeOpenEnabled && !isDrawerVisible(Gravity.START)) {
          return false
      }
      return super.onInterceptTouchEvent(ev)
  }

  @SuppressLint("ClickableViewAccessibility")
  override fun onTouchEvent(ev: MotionEvent): Boolean {
      if (!isSwipeOpenEnabled && !isDrawerVisible(Gravity.START)) {
          return false
      }
      return super.onTouchEvent(ev)
  }
}

0

这对我有用

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.