212

我一直在关注Google 的抽屉式导航指南,我想将其添加到带有标签和手势的 Activity 中。

我想禁用打开导航抽屉的手势,有人知道怎么做吗?

4

6 回答 6

486

你应该使用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

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

如果它仍然不起作用,请查看此处提供的答案。

于 2013-06-18T09:27:15.867 回答
122

对于锁定,您可以这样做:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

和解锁:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
于 2015-10-13T12:00:48.933 回答
15

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

做这个 :

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

这应该像一个魅力

于 2017-08-10T10:13:28.873 回答
9

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

以下课程对我有用(Kotlin):

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)
  }
}
于 2018-09-04T06:49:26.893 回答
8

要禁用滑动,覆盖onInterceptTouchEventonTouchEvent打开DrawerLayout并让它们返回 false。

于 2018-03-04T13:16:19.703 回答
1

这对我有用

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
于 2020-03-25T11:33:12.417 回答