在 DrawerLayout 上禁用手势监听器

Posted

技术标签:

【中文标题】在 DrawerLayout 上禁用手势监听器【英文标题】:Disable gesture listener on DrawerLayout 【发布时间】:2013-06-06 05:33:09 【问题描述】:

如何禁用 DrawerLayout 的手势识别? (从左到右滑动)并且只接受关闭手势(从右到左)并仅使用主页按钮打开抽屉?

【问题讨论】:

【参考方案1】:

这对我有用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

您可以通过点击主页按钮来展开抽屉,并可以使用从右向左滑动手势来关闭它。但是,不再触发从左向右滑动。

【讨论】:

要解锁它你使用 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 这在我的情况下不起作用,即使我使用上述解决方案设置了抽屉布局,我也总是在滑动手势时得到一个抽屉。 我也有同样的问题。 @SalmanKhakwani 和 reid-mac 在下面查看 Vit-Vetal 的答案。 认为 LOCK_MODE_LOCKED_CLOSED 在 Compat 24.x 中工作,但在较新的兼容库中功能已更改,并且 LOCK_MODE_LOCKED_CLOSED 现在完全阻止显示导航菜单,即使使用汉堡菜单也是如此。现在需要其他解决方案。【参考方案2】:

对于setDrawerLockMode(),这是在代码中,但不在 android developer 文档中:

/**
 * The drawer is unlocked.
 */
public static final int LOCK_MODE_UNLOCKED = 0;

/**
 * The drawer is locked closed. The user may not open it, though
 * the app may open it programmatically.
 */
public static final int LOCK_MODE_LOCKED_CLOSED = 1;

/**
 * The drawer is locked open. The user may not close it, though the app
 * may close it programmatically.
 */
public static final int LOCK_MODE_LOCKED_OPEN = 2;

【讨论】:

现在出现在开发文档中:developer.android.com/reference/android/support/v4/widget/…【参考方案3】:

要禁用 DrawerLayout 手势识别,请使用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);

然后,要启用从右向左滑动,请检查以下资源: http://android-journey.blogspot.com/2010/01/android-gestures.html

【讨论】:

【参考方案4】:

看起来我发现了错误。例如如果设置:

android:layout_gravity="right"

android:layout_gravity="left"

对于抽屉内容并使用.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) 一切都会好的。

但如果android:layout_gravity="left|center_vertical" 或类似LOCK_MODE_LOCKED_CLOSED 不起作用。

【讨论】:

你是对的。 @A--C ***.com/questions/18413116/… 在这里很好地描述了原因【参考方案5】:

LOCK_MODE_LOCKED_CLOSED 现在完全阻止了导航菜单的显示,即使是通过汉堡菜单(这可能是不需要的)。以下对我有用:https://***.com/a/52160351/377320

【讨论】:

【参考方案6】:

这对我有用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

您可以通过点击必须触发的汉堡图标或按钮来展开抽屉。但是,不再触发从左向右滑动。

【讨论】:

以上是关于在 DrawerLayout 上禁用手势监听器的主要内容,如果未能解决你的问题,请参考以下文章

关闭DrawerLayout的手势滑动

在 iPhone 上的同一 HTML 元素上滑动和平移手势

在 contentView 中禁用侧视图上的手势

在 xcode 的 SideMenu 库上禁用滑动/手势

禁用 UIScrollView 手势

DrawerLayout(抽屉效果)