Androidでナビゲーションドロワーを開くスワイプジェスチャーを無効にする


回答:


436

あなたは使うべきです:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

それは私のために働いた、引き出しを開くためのスワイプは無効にされた。

それでも機能しない場合は、こちらの回答を確認してください


1
本気ですか?私は試しましたが、両方とも開閉できませんでした。私はActionBarSherlockフレームワークを使用してAndroid 2.3xでテストしていました。
thhnh 2013

94
明確にするために:DrawerLayout.LOCK_MODE_LOCKED_OPENは、ユーザーが引き出しを非表示にできないように、引き出しを開いた状態にロックします。DrawerLayout.LOCK_MODE_LOCKED_CLOSEDは、ユーザーが引き出しを開けないように、引き出しを閉じた状態にロックします。最後に、DrawerLayout.LOCK_MODE_UNLOCKEDは引き出しをロック解除して、開いたり閉じたりできるようにします。
egfconnor 2013年

4
あなたはまだ持っていない場合はmDrawerLayout次のように、それを設定するmDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
スティーブ・リドル

4
しかし、アプリのアイコンのみで開閉を制御し、スワイプしない場合はどうでしょうか?それを行う方法はありますか?新しいToolBar(API 21)を実装SlidingTabLayoutして、Navと競合するその機能を使用しようとしているので、興味があります。引き出しスワイプ。だから私はむしろナビを無効にしたいと思います。ToolBarスライド機能を採用した引き出しスライド。
Azurespot 2015

2
これにより、スワイプだけでなく、引き出し全体が無効になります(たとえば、アイコンが機能しなくなります)。そのため、スワイプと呼ばれる質問には答えられませんでした
HelloWorld

101

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

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

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

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

受け入れられた回答をLOCK_MODE_UNLOCKEDフラグで明確にしていただきありがとうございます
Mattia Ruggiero

1
これは反対の方法も導入しているため、受け入れられた回答よりも優れていると思います
TheWhiteLlama

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);を使用した場合 ロックするには引き出しを閉じたので、ロックにはmDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);を使用しました。
SH Mehdi

15

setDrawerLockMode()を使用する場合は、重力値も追加してください。

これを行う :

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

これは魅力のように機能するはずです


2
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); DrawerとdrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED、GravityCompat.END);の両方をロックします。ロックしたい引き出しを表します。おかげでそれは私のために機能し、私の時間を節約します。
Sanjeev Sangral 2018

現在のソースでは、左は3、右は5が期待どおりに機能するように見えますが、GravityCompat.ENDは機能しません。
ProjectJourneyman 2018年

6

スワイプを無効にするには、オーバーライドonInterceptTouchEventしてonTouchEventオンにしDrawerLayout、falseを返すようにします。


これが正解です。これについては、もう少し詳しく説明しましょう。
Martin Vysny、2018

4

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

0

これは私のために働く

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.