web-dev-qa-db-ja.com

androidのナビゲーションドロワーを開くスワイプジェスチャーを無効にします

私は Googleのナビゲーションドロワーガイド をフォローしており、タブとジェスチャーでアクティビティに追加したいと思います。

ナビゲーションドロワーを開くためのジェスチャを無効にしたいのですが、これを行う方法はありますか?

164
user1627990

以下を使用する必要があります。

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

それは私と一緒に動作します、引き出しを開くスワイプは無効になりました。

それでも動作しない場合は、提供されている答えを確認してください here

387
Tran Hieu

ロックするには、これを行うことができます:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

そしてロック解除のために:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
86
saleh sereshki

setDrawerLockMode() ;を使用する場合も重力値を追加します。

これを行う :

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

これは魅力のように動作するはずです

13
Burhan Shakir

スワイプを無効にするには、onInterceptTouchEventonTouchEventおよびDrawerLayoutをオーバーライドし、falseを返します。

3
HelloWorld

スワイプを無効にする答えは正しいものです。 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)
  }
}
1
Martin Vysny