217 votes

désactiver le geste de balayage qui ouvre le tiroir de navigation dans Android

J'ai suivi le guide du tiroir de navigation par Google et j'aimerais l'ajouter à une activité avec des onglets et des gestes.

J'aimerais désactiver le geste d'ouverture du tiroir de navigation, quelqu'un a-t-il une idée de comment faire ?

497voto

Tran Hieu Points 705

Vous devriez utiliser :

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Cela a fonctionné pour moi, le glissement pour ouvrir le tiroir a été désactivé.

Si cela ne fonctionne toujours pas, vérifiez la réponse fournie. aquí .

1 votes

Vous êtes sûr ? J'ai essayé mais il était désactivé en ouverture et en fermeture, les deux. Je testais sur Android 2.3x avec le framework ActionBarSherlock.

0 votes

J'en suis sûr car je l'ai utilisé dans mon code. Mais je ne l'ai pas utilisé avec ActionBarSherlock. Je l'ai utilisé uniquement avec ActionBar.

117 votes

Pour clarifier : DrawerLayout.LOCK_MODE_LOCKED_OPEN verrouille le tiroir à l'état ouvert pour que l'utilisateur ne puisse pas le cacher. DrawerLayout.LOCK_MODE_LOCKED_CLOSED verrouille le tiroir à l'état fermé pour que l'utilisateur ne puisse pas l'ouvrir. Enfin, DrawerLayout.LOCK_MODE_UNLOCKED déverrouille le tiroir pour qu'il puisse être ouvert ou fermé.

133voto

saleh sereshki Points 1156

Pour le verrouillage, vous pouvez le faire :

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

et pour le déverrouillage :

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

15voto

Burhan Shakir Points 217

Ajoutez également une valeur de gravité lorsque vous utilisez setDrawerLockMode() ;

Faites-le :

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

Cela devrait fonctionner comme un charme

11voto

Martin Vysny Points 559

La réponse à la désactivation du swiping est la bonne. Je pense que LOCK_MODE_LOCKED_CLOSED fonctionnait dans Compat 24.x, mais la fonctionnalité a été modifiée dans les bibliothèques Compat plus récentes et LOCK_MODE_LOCKED_CLOSED empêche maintenant complètement le menu de navigation de s'afficher, même en utilisant le menu hamburger.

La classe suivante fonctionne pour moi (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)
  }
}

8voto

user1394710 Points 125

Pour désactiver le balayage, remplacez onInterceptTouchEvent y onTouchEvent sur DrawerLayout et les faire revenir à faux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X