Pour le menu coulissant de jfeinstein10 ( https://github.com/jfeinstein10/SlidingMen ), je peux glisser n'importe où dans l'application pour ouvrir le menu.
Pour le tiroir de navigation récemment introduit par Google http://developer.Android.com/design/patterns/navigation-drawer.html#side-nav , est-il possible que je puisse avoir un comportement similaire?
Jusqu'à présent, d'après la documentation, je n'ai vu que la limite de glisser depuis Edge ou de toucher l'icône de l'application.
L'utilisateur peut afficher le tiroir de navigation sur l'écran en faisant glisser le doigt depuis le bord gauche de l'écran ou en touchant l'icône de l'application sur la barre d'action.
J'ai trouvé une solution. Vous pouvez configurer la marge de toucher et la rendre aussi large que votre vue. Voici le lien
Définir la marge de glissement pour Android Tiroir de navigation
Google, d'après la façon dont ils écrivent leur tutoriel "Si l'utilisateur touche le bord tout à fait gauche de l'écran (à moins de 20 dp à partir de la gauche)", semble ne pas vouloir cette fonctionnalité.
Voir http://developer.Android.com/design/patterns/navigation-drawer.html
"L'utilisateur peut afficher le tiroir de navigation sur l'écran en faisant glisser le doigt depuis le bord gauche de l'écran ou en touchant l'icône de l'application dans la barre d'action."
Ils ne disent ni ne glissent de n'importe où sur l'écran. Ils n'ont pas non plus cette fonctionnalité dans aucune de leurs applications (G +, Gmail, etc.), donc si vous voulez cette fonctionnalité, vous devriez probablement vous en tenir à l'écriture de votre propre (avec des gestes) ou d'un tiers (par exemple. Jfeinstein10).
EDIT: L'application Youtube vous permet de glisser n'importe où, mais la version que j'ai au moins (4.5.17) ne semble pas utiliser leur nouvelle api.
Vous pouvez utiliser ceci
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
"mLeftDragger");//mRightDragger or mLeftDragger based on Drawer Gravity
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 * 3);
Comme d'autres l'ont dit, et Cheney l'a dit dans sa réponse - il est probablement préférable de laisser les choses comme prévu. Cependant, le DrawerLayout
est un style différent du SlidingMenu
. Google a également ajouté SlidingPaneLayout
qui correspond plus étroitement au style de SlidingMenu.
J'ai fini par implémenter un SlidingPaneLayout
de cette façon, car c'était plus ce que je cherchais après tout. (C'est également le style de l'application YouTube/Hangouts)
<Android.support.v4.widget.SlidingPaneLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/sliding_pane_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:id="@+id/left_pane"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<FrameLayout
Android:id="@+id/content_frame"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"/>
</Android.support.v4.widget.SlidingPaneLayout>
Ensuite, pour ouvrir avec le bouton d'accueil de la barre d'action:
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action buttons
switch(item.getItemId()) {
case Android.R.id.home:
if (mPaneLayout.isOpen())
mPaneLayout.closePane();
else
mPaneLayout.openPane();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Vous pouvez ensuite implémenter un PanelSlideListener
pour gérer le glissement/l'ouverture/la fermeture.
Je suggère de lire également la série d'Adam Powell sur le tiroir de navigation - la partie 3 traite de l'utilisation de SlidingPaneLayout vs Navigation Drawer:
Partie 1 - https://plus.google.com/+AdamWPowell/posts/2zi4DXd3jkm
Partie 2 - https://plus.google.com/+AdamWPowell/posts/VdgexsZeXHW
Partie 3 - https://plus.google.com/+AdamWPowell/posts/8j2GVw72i1E
Partie 4 - https://plus.google.com/+AdamWPowell/posts/TtBFUXhe5H
Vous pouvez utiliser GestureDetector
pour détecter vous-même les mouvements de glissement et ouvrir simplement le tiroir de navigation vous-même en utilisant la méthode DrawerLayout.openDrawer()
.