Deaktivieren Sie die Wischgeste, die die Navigationsleiste in Android öffnet


Antworten:


436

Du solltest benutzen:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Es hat bei mir funktioniert, der Wisch zum Öffnen der Schublade war deaktiviert.

Wenn es immer noch nicht funktioniert, lesen Sie die Antwort hier .


1
Bist du sicher? Ich habe es versucht, aber es war offen und geschlossen, beide. Ich habe auf Android 2.3x mit ActionBarSherlock Framework getestet.
Thanhnh

94
Zur Verdeutlichung: DrawerLayout.LOCK_MODE_LOCKED_OPEN sperrt die Schublade in den geöffneten Zustand, sodass der Benutzer sie nicht ausblenden kann. DrawerLayout.LOCK_MODE_LOCKED_CLOSED sperrt die Schublade in den geschlossenen Zustand, sodass der Benutzer sie nicht öffnen kann. Zuletzt entsperrt DrawerLayout.LOCK_MODE_UNLOCKED die Schublade, sodass sie geöffnet oder geschlossen werden kann.
egfconnor

4
Wenn Sie es noch nicht getan haben mDrawerLayout, stellen Sie es wie folgt ein:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle

4
Aber wie wäre es, wenn wir das Öffnen / Schließen nur mit dem App-Symbol steuern und nicht wischen möchten? Gibt es eine Möglichkeit, das zu tun? Ich bin neugierig, weil ich versuche, die neue ToolBar(API 21) zu implementieren und die darin enthaltene SlidingTabLayoutFunktion zu verwenden, die mit meinem Nav in Konflikt steht. Schubladen wischen. Also würde ich lieber die Navigation deaktivieren. Schubladenführung zugunsten der ToolBarSchiebefunktion.
Azurespot

2
Dies deaktiviert die gesamte Schublade (zB Symbol funktioniert nicht mehr), nicht nur klauen, damit nicht die Frage beantworten - die speziell auf Durchzug bezeichnet
Hello World

101

Zum Sperren können Sie Folgendes tun:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

und zum Entsperren:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

Vielen Dank für die Klarstellung der akzeptierten Antwort mit dem Flag LOCK_MODE_UNLOCKED
Mattia Ruggiero

1
Ich denke, dies ist besser als die akzeptierte Antwort, da es auch die gegnerische Methode
einführt

Wenn ich mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED) verwendet habe; zum Sperren schloss es die Schublade, zum Sperren benutzte ich mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi

15

Fügen Sie bei Verwendung von setDrawerLockMode () auch den Schwerkraftwert hinzu .

Mach das :

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

Dies sollte wie ein Zauber wirken


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); Sperren Sie sowohl Drawer als auch drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END). Stellen Sie dar, welche Schublade Sie sperren möchten, danke Mann, es funktioniert für mich und sparen Sie meine Zeit.
Sanjeev Sangral

In den aktuellen Quellen sieht es so aus, als würden 3 für links und 5 für rechts wie erwartet funktionieren, GravityCompat.END jedoch nicht.
ProjectJourneyman

6

So deaktivieren Sie klauen, überschreiben onInterceptTouchEventund onTouchEventauf DrawerLayoutund haben sie false zurück.


Dies ist die richtige Antwort. Lassen Sie mich dies in der Antwort etwas näher erläutern.
Martin Vysny

4

Die Antwort zum Deaktivieren des Wischens ist die richtige. Ich denke, LOCK_MODE_LOCKED_CLOSED hat in Compat 24.x funktioniert, aber die Funktionalität wurde in neueren kompatiblen Bibliotheken geändert und LOCK_MODE_LOCKED_CLOSED verhindert jetzt vollständig, dass das Navigationsmenü angezeigt wird, selbst wenn das Hamburger-Menü verwendet wird.

Die folgende Klasse funktioniert für mich (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

Das funktioniert bei mir

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.