deshabilitar el gesto de deslizar que abre el cajón de navegación en Android


Respuestas:


438

Deberías usar:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

A mí me funcionó, el deslizamiento para abrir el cajón estaba desactivado.

Si aún así no funciona, consulte la respuesta provista aquí .


1
¿Estás seguro? Lo intenté pero estaba abierto y cerrado por diable, ambos. Estaba probando en Android 2.3x con el marco ActionBarSherlock.
gracias

94
Para aclarar: DrawerLayout.LOCK_MODE_LOCKED_OPEN bloquea el cajón al estado abierto para que el usuario no pueda ocultarlo. DrawerLayout.LOCK_MODE_LOCKED_CLOSED bloquea el cajón al estado cerrado para que el usuario no pueda abrirlo. Por último, DrawerLayout.LOCK_MODE_UNLOCKED desbloquea el cajón para que pueda abrirse o cerrarse.
egfconnor

44
Si aún no lo ha hecho mDrawerLayout, configúrelo de la siguiente manera:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle

44
Pero, ¿qué tal si queremos controlar la apertura / cierre solo con el ícono de la aplicación, y no deslizar? ¿Hay una manera de hacer eso? Tengo curiosidad porque estoy tratando de implementar la nueva ToolBar(API 21) y usar la SlidingTabLayoutfunción que tiene, lo cual está en conflicto con mi Nav. deslizamiento del cajón. Prefiero deshabilitar el Nav. diapositiva del cajón a favor de la ToolBarcaracterística deslizante.
Azurespot

2
esto deshabilita todo el cajón (por ejemplo, el ícono ya no funciona), no solo deslizar, por lo tanto, no respondió la pregunta, que específicamente se refería a deslizar
HelloWorld

101

para bloquear puedes hacer esto:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

y para desbloquear:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

Gracias por aclarar la respuesta aceptada con la bandera LOCK_MODE_UNLOCKED
Mattia Ruggiero

1
Creo que esto es mejor que la respuesta aceptada, ya que también introduce el método opuesto
TheWhiteLlama

Si usara mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); para bloquearlo cerró el cajón, así que para bloquear utilicé mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi

15

Agregue valor de gravedad también cuando use setDrawerLockMode () ;

Hacer esto :

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

Esto debería funcionar como un encanto


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); bloquee el Drawer y drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); representa qué cajón quieres cerrar, gracias, hombre, funciona para mí y ahorra mi tiempo.
Sanjeev Sangral

En las fuentes actuales, parece que 3 para la izquierda y 5 para la derecha funcionarán como se esperaba, pero GravityCompat.END no.
ProjectJourneyman

6

Para desactivar deslizar, anulación onInterceptTouchEventy onTouchEventen DrawerLayouty ellos tienen return false.


Esta es la respuesta correcta. Permítanme explicar un poco más sobre esto en la respuesta.
Martin Vysny

4

La respuesta para desactivar el deslizamiento es la correcta. Creo que LOCK_MODE_LOCKED_CLOSED funcionó en Compat 24.x, pero la funcionalidad se ha cambiado en las nuevas bibliotecas de compatibilidad y LOCK_MODE_LOCKED_CLOSED ahora evita por completo que se muestre el menú de navegación, incluso mediante el uso del menú de hamburguesas.

La siguiente clase funciona para mí (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

Esto funciona para mi

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.