在DrawerLayout上禁用手势监听器

72

如何禁用DrawerLayout的手势识别?(从左到右滑动),只接受关闭手势(从右到左)并仅使用Home按钮打开侧边栏?

6个回答

177

这对我有用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

您可以通过点击Home按钮来展开抽屉,可以使用右滑手势来关闭它。然而,左滑手势不再触发。


23
要解锁它,您可以使用mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)。 - support_ms
8
在我的情况下,这并没有起作用,即使我使用上述解决方案设置了抽屉布局,我仍然在滑动手势时得到一个抽屉。 - Salman Khakwani
我也遇到了同样的问题。 - Reid Mac
它还禁用了关闭手势和返回按钮的关闭操作。 - Dan Meng
1
认为 LOCK_MODE_LOCKED_CLOSED 在 Compat 24.x 中有效,但在更新的兼容库中功能已更改,现在 LOCK_MODE_LOCKED_CLOSED 完全阻止导航菜单显示,即使通过使用汉堡菜单也无法显示。现在需要其他解决方案。 - Martin Vysny
显示剩余2条评论

23
对于setDrawerLockMode(),这段代码中有该函数但是在Android开发者文档中没有提到。
/**
 * 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;

现在这个出现在开发文档上:http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#LOCK_MODE_LOCKED_CLOSED - greg7gkb
它似乎无效,我仍然可以拖动打开它。 - htafoya

3

看起来我发现了一个bug。例如,如果设置:

android:layout_gravity="right"

或者

android:layout_gravity="left"

如果要缩放内容,请使用.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)

但是,如果使用了android:layout_gravity="left|center_vertical"或类似的选项,则LOCK_MODE_LOCKED_CLOSED将无法正常工作。


1
你说得对。原因在这里被@A--C描述得很好 https://dev59.com/IXbZa4cB1Zd3GeqPBQ0c#18413276 - Fatima

3

3

我不知道,但它没有起作用,我仍然可以通过滑动手势打开它。 - htafoya

2
这对我有用:

这对我有用:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接