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

问题描述 投票:163回答:5

我一直在关注the navigation drawer guide by Google,我想将它添加到带有标签和手势的活动中。

我想禁用打开导航抽屉的手势,有没有人知道如何做到这一点?

android tabs navigation gesture drawer
5个回答
397
投票

你应该使用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

它与我合作,打开抽屉的滑动被禁用。

如果它仍然无效,请查看here提供的答案。


89
投票

锁定你可以这样做:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

并解锁:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

14
投票

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

做这个 :

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

这应该像魅力一样


3
投票

要禁用滑动,请在onInterceptTouchEvent上覆盖onTouchEventDrawerLayout并让它们返回false。


2
投票

禁用滑动的答案是正确的。我认为LOCK_MODE_LOCKED_CLOSED在Compat 24.x中工作,但是在较新的compat库中功能已经改变,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)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.