disabilita il gesto di scorrimento che apre il riquadro di navigazione in Android


Risposte:


438

Dovresti usare:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Ha funzionato per me, il colpo per aprire il cassetto è stato disabilitato.

Se continua a non funzionare, controlla la risposta fornita qui .


1
Sei sicuro? Ci ho provato ma era diabetico aperto e chiuso, entrambi. Stavo testando su Android 2.3x con il framework ActionBarSherlock.
grazie

94
Per chiarire: DrawerLayout.LOCK_MODE_LOCKED_OPEN blocca il cassetto allo stato aperto in modo che l'utente non possa nasconderlo. DrawerLayout.LOCK_MODE_LOCKED_CLOSED blocca il cassetto allo stato chiuso in modo che l'utente non possa aprirlo. Infine, DrawerLayout.LOCK_MODE_UNLOCKED sblocca il cassetto in modo che possa essere aperto o chiuso.
egfconnor,

4
Se non l'hai già fatto mDrawerLayout, impostalo come segue:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle,

4
E se volessimo controllare l'apertura / chiusura solo con l'icona dell'app e non scorrere? C'è un modo per farlo? Sono curioso perché sto cercando di implementare il nuovo ToolBar(API 21) e utilizzare la SlidingTabLayoutfunzione che ha, che è in conflitto con il mio Nav. scorrimento del cassetto. Quindi preferirei disabilitare il Nav. cassetto scorrevole a favore della ToolBarfunzione scorrevole.
Azurespot,

2
questo disabilita l'intero cassetto (ad esempio l'icona non funziona più), non solo lo scorrimento, quindi non ha risposto alla domanda - che si riferiva specificamente allo scorrimento
HelloWorld

101

per bloccare puoi fare questo:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

e per sbloccare:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

Grazie per aver chiarito la risposta accettata con la bandiera LOCK_MODE_UNLOCKED
Mattia Ruggiero

1
Penso che sia meglio della risposta accettata poiché introduce anche il metodo opposto
TheWhiteLlama

Se avessi usato mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); per chiuderlo chiuso il cassetto così, per bloccare ho usato mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi,

15

Aggiungi anche il valore di gravità quando usi setDrawerLockMode () ;

Fai questo :

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

Questo dovrebbe funzionare come un fascino


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); bloccare sia Drawer che drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); rappresenta quale cassetto vuoi bloccare grazie all'uomo che funziona per me e risparmia tempo.
Sanjeev Sangral,

Nelle fonti attuali, sembra che 3 per sinistra e 5 per destra funzionino come previsto, ma GravityCompat.END no.
ProjectJourneyman,

6

Per disabilitare strisciata, override onInterceptTouchEvente onTouchEventsu DrawerLayoute li hanno return false.


Questa è la risposta corretta Vorrei approfondire un po 'di più nella risposta.
Martin Vysny,

4

La risposta per disabilitare lo scorrimento è quella corretta. Penso che LOCK_MODE_LOCKED_CLOSED abbia funzionato in Compat 24.x, ma la funzionalità è stata cambiata nelle librerie compat più recenti e LOCK_MODE_LOCKED_CLOSED ora impedisce completamente la visualizzazione del menu di navigazione, anche usando il menu hamburger.

La seguente classe funziona per me (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

Questo funziona per me

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.