【问题标题】:disable the swipe gesture that opens the navigation drawer in android禁用在 android 中打开导航抽屉的滑动手势
【发布时间】:2013-06-07 17:10:38
【问题描述】:

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

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

【问题讨论】:

    标签: android tabs navigation gesture drawer


    【解决方案1】:

    你应该使用:

    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    

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

    如果还是不行,请查看here提供的答案。

    【讨论】:

    • 你确定吗?我试过了,但它都被禁用了打开和关闭。我正在使用 ActionBarSherlock 框架在 android 2.3x 上进行测试。
    • 澄清一下:DrawerLayout.LOCK_MODE_LOCKED_OPEN 将抽屉锁定为打开状态,因此用户无法隐藏它。 DrawerLayout.LOCK_MODE_LOCKED_CLOSED 将抽屉锁定为关闭状态,因此用户无法打开它。最后,DrawerLayout.LOCK_MODE_UNLOCKED 解锁抽屉,使其可以打开或关闭。
    • 如果还没有mDrawerLayout,设置如下:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    • 但是如果我们只想通过应用图标来控制打开/关闭而不是滑动呢?有没有办法做到这一点?我很好奇,因为我正在尝试实现新的ToolBar(API 21)并使用它具有的SlidingTabLayout 功能,这与我的导航冲突。抽屉滑动。所以我宁愿禁用导航。抽屉滑轨支持ToolBar 滑动功能。
    • 这会禁用整个抽屉(例如图标不再起作用),而不仅仅是滑动,因此没有回答问题 - 具体指的是滑动
    【解决方案2】:

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

    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    

    解锁:

    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
    

    【讨论】:

    • 感谢您使用 LOCK_MODE_UNLOCKED 标志阐明已接受的答案
    • 我认为这比公认的答案更好,因为它还引入了相反的方法
    • 如果我使用 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);为了锁定它关闭了抽屉,所以为了锁定我使用了 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
    • error: cannot find symbol mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    【解决方案3】:

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

    这样做:

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

    这应该像一个魅力

    【讨论】:

    • mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);锁定 Drawer 和 DrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);代表你想锁定哪个抽屉谢谢它对我有用并节省我的时间。
    • 在当前的来源中,看起来左边 3 和右边 5 会按预期工作,但 GravityCompat.END 不能。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 这是正确答案。让我在答案中详细说明一下。
      【解决方案6】:

      这对我有用

      mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 2016-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多