desativar o gesto de furto que abre a gaveta de navegação no android

Respostas:

436

Você deveria usar:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Funcionou para mim, o furto para abrir a gaveta foi desativado.

Se ainda assim não funcionar, confira a resposta fornecida aqui .

Tran Hieu
fonte
1
Você tem certeza? Eu tentei, mas estava com diabo aberto e fechado, ambos. Eu estava testando no Android 2.3x com o framework ActionBarSherlock.
26413 thanhnh
94
Para esclarecer: DrawerLayout.LOCK_MODE_LOCKED_OPEN bloqueia a gaveta para o estado aberto, para que o usuário não possa ocultá-la. DrawerLayout.LOCK_MODE_LOCKED_CLOSED bloqueia a gaveta para o estado fechado, para que o usuário não possa abri-la. Por fim, DrawerLayout.LOCK_MODE_UNLOCKED desbloqueia a gaveta para que possa ser aberta ou fechada.
egfconnor
4
Se você ainda não o tem mDrawerLayout, defina-o da seguinte forma: #mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle
4
Mas e se quisermos controlar o abrir / fechar apenas com o ícone do aplicativo e não deslizar? Existe uma maneira de fazer isso? Estou curioso, porque estou tentando implementar o novo ToolBar(API 21) e usar o SlidingTabLayoutrecurso que possui, que está em conflito com o meu Nav. passando a gaveta. Então, prefiro desativar o Nav. corrediça da gaveta em favor do ToolBarrecurso deslizante.
Azurespot
2
Isso desativa a gaveta inteira (por exemplo ícone não funciona mais), não apenas passando, portanto, não respondeu a pergunta - que referiu especificamente a swiping
HelloWorld
101

para bloquear, você pode fazer isso:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

e para desbloquear:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
saleh sereshki
fonte
Obrigado por esclarecer a resposta aceita com o sinalizador LOCK_MODE_UNLOCKED
Mattia Ruggiero
1
Eu acho que isso é melhor do que a resposta aceite, uma vez que também introduz o método oposto
TheWhiteLlama
Se eu usasse mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); para trancá-lo fechou a gaveta, portanto, para trancar, usei mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi
15

Adicione o valor da gravidade também ao usar setDrawerLockMode () ;

Faça isso :

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

Isso deve funcionar como um encanto

Burhan Shakir
fonte
2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); bloqueie o Drawer e o drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); representar qual gaveta você deseja bloquear, obrigado, homem, funciona para mim e economiza meu tempo.
Sanjeev Sangral
Nas fontes atuais, parece que 3 para a esquerda e 5 para a direita funcionarão conforme o esperado, mas o GravityCompat.END não.
ProjectJourneyman
6

Para desativar a passagem, substitua onInterceptTouchEvente ative e faça onTouchEventcom DrawerLayoutque eles retornem false.

Olá Mundo
fonte
Essa é a resposta correta. Deixe-me elaborar isso um pouco mais na resposta.
Martin Vysny
4

A resposta para desativar o deslize é a correta. Acho que o LOCK_MODE_LOCKED_CLOSED funcionou no Compat 24.x, mas a funcionalidade foi alterada nas bibliotecas compatíveis mais recentes e o LOCK_MODE_LOCKED_CLOSED agora impede completamente a exibição do menu nav, mesmo usando o menu hamburger.

A seguinte classe funciona para mim (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
fonte
0

Isso funciona para mim

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
user350524
fonte