34 votes

Définir la marge de glissement pour le tiroir de navigation Android

Je suis l'aide de la Navigation Tiroir de mon application. C'est génial, sauf que je n'ai pas trouvé un moyen facile de définir la façon dont le tiroir est ouvert. Le comportement par défaut est de glisser à partir du bord gauche de l'écran pour ouvrir. C'est bien, à moins que le téléphone/table dispose d'un sur et au bord de téléphone ne peut pas être touché. Je voudrais permettre à l'utilisateur de toucher et faire glisser à partir d'un bord de l'écran vers la gauche. C'est facile à mettre avec les autres nav tiroir libs(Glissement lib). Je n'ai pas vu quoi que ce soit avec Google lib malheureusement.

Il y a un onTouchEvent() méthode pour la NavigationLayout qui pourrait peut être utilisé. Bien sûr, vous pouvez écouter tous les événements tactiles et de déclencher un openDrawer, mais espérais un moyen facile avec moins de code. Des idées?

70voto

Maxim Efimov Points 1806

Ici, j'ai trouvé une solution via les réflexions

 DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
        "mLeftDragger");//mRightDragger for right obviously
mDragger.setAccessible(true);
ViewDragHelper draggerObj = (ViewDragHelper) mDragger
        .get(mDrawerLayout);

Field mEdgeSize = draggerObj.getClass().getDeclaredField(
        "mEdgeSize");
mEdgeSize.setAccessible(true);
int edge = mEdgeSize.getInt(draggerObj);

mEdgeSize.setInt(draggerObj, edge * 5); //optimal value as for me, you may set any constant in dp
 

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