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í .

Tran Hieu
fuente
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);
Saleh sereshki
fuente
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

Burhan Shakir
fuente
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.

Hola Mundo
fuente
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)
  }
}
Martin Vysny
fuente
0

Esto funciona para mi

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
usuario350524
fuente