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

use*_*990 175 navigation tabs android gesture drawer

我一直在关注谷歌的导航抽屉指南,我想将它添加到带有标签和手势的活动中.

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

小智 415

你应该使用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
Run Code Online (Sandbox Code Playgroud)

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

如果仍然无效,请查看此处提供的答案.

  • 澄清:DrawerLayout.LOCK_MODE_LOCKED_OPEN将抽屉锁定到打开状态,因此用户无法隐藏它.DrawerLayout.LOCK_MODE_LOCKED_CLOSED将抽屉锁定到关闭状态,因此用户无法打开它.最后,DrawerLayout.LOCK_MODE_UNLOCKED解锁抽屉,使其可以打开或关闭. (90认同)
  • 但是,如果我们只想用应用程序图标控制打开/关闭,而不是滑动呢?有没有办法做到这一点?我很好奇,因为我正在尝试实现新的`ToolBar`(API 21)并使用它具有的`SlidingTabLayout`功能,这与我的Nav冲突.抽屉刷.所以我宁愿禁用导航.抽屉滑动,支持`ToolBar`滑动功能. (4认同)
  • 如果你还没有`mDrawerLayout`,请按如下方式设置:`mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);` (3认同)
  • 这会禁用整个抽屉(例如,图标不再起作用),而不仅仅是刷卡,因此无法回答问题-特别是指刷卡 (2认同)

sal*_*hki 92

锁定你可以这样做:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
Run Code Online (Sandbox Code Playgroud)

并解锁:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这比公认的答案更好,因为它还引入了相反的方法 (3认同)

小智 14

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

做这个 :

drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);
Run Code Online (Sandbox Code Playgroud)

这应该像魅力一样

  • mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 锁定 Drawer 和 drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); 代表您要锁定哪个抽屉,谢谢它对我有用并节省我的时间。 (2认同)

Mar*_*sny 8

禁用滑动的答案是正确的。我认为 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)
  }
}
Run Code Online (Sandbox Code Playgroud)


Hel*_*rld 5

要禁用滑动,请覆盖,onInterceptTouchEvent然后再onTouchEvent启用DrawerLayout,使它们返回false。


小智 5

这对我有用

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
Run Code Online (Sandbox Code Playgroud)