Comment montrer le DrawerLayout lorsque vous faites glisser de gauche à droite, n'importe où?
fond
google a introduit le DrawerLayout, qui affiche un menu sur la gauche de l'écran lorsque vous cliquez sur les boutons "up" de la barre d'action.
parce que la bibliothèque n'est pas encore supporté sur actionBarSherlock, il y a déjà un moyen de le surmonter à l'aide de ce projet .
il a déjà des variantes sur de nombreuses applications: courants, gmail, hangouts, youtube...
la question
sur les "courants" de l'application (et youtube) , lorsque l'utilisateur glisse (le plus à gauche) de la page de gauche à droite , le DrawerLayout apparaît, n'importe où le doigt a commencé à la toucher .
comment puis-je obtenir le même effet? peut-être que je devrais utiliser onInterceptTouchEvent ?
il n'y a pas beaucoup de documentation et les tutoriels de ce cool de faire les choses , autres que ce lien (ok et cette une trop) . ils disent (dans le cadre de "Donner à l'utilisateur un coup d'oeil rapide") que sur 20dp sur la gauche est utilisé pour cette fonctionnalité, mais je peux voir que les "courants" travailler avec une zone beaucoup plus vaste.
il semble que la bibliothèque n'est pas encore tout à fait fini, et donc la mise en page du fichier xml ne peut pas même être montré dans les visuels de l'INTERFACE utilisateur de l'éditeur...
EDIT: il semble que la bibliothèque est en open source. le code est disponible sur :
.../android-sdk\sources\android-18\android\support\v4\widget\DrawerLayout.java
.../android-sdk\sources\android-18\android\support\v4\widget\SlidingPaneLayout.java
.../android-sdk\sources\android-18\android\support\v4\app\ActionBarDrawerToggle.java
maintenant, la question est de savoir comment le faire fonctionner comme je l'ai écrit, de sorte qu'il pourrait fonctionner comme sur youtube , ce qui nous permet de personnaliser la façon dont elle regarde et pour permettre le défilement.
je suis en utilisant ce que j'ai posté. vous dites que je n'ai pas besoin de chercher à ce projet, et il suffit d'utiliser ce que google a? cela fonctionne très bien avec ABS , et qu'il ne me permettent de personnaliser la façon dont les à présent, il va déclencher le défilement de la navigation de tiroir (par exemple à partir du milieu de l'écran) ? si oui, comment? l'exemple d'application qu'ils n'ont qu'permet de faire défiler lorsque vous commencez à toucher le plus à gauche de l'écran...
Eh bien, Im absolument sûr d'ABS + de navigation tiroir intégrer sans aucun problème, sans aucune aide supplémentaire comme le projet que vous avez posté. Aussi loin que la zone de l'écran qui est reconnu lorsque vous faites glisser le tiroir à apparaître, il est assez mince, et je ne suis pas sûr si peut être modifié de telle sorte que le glissement de la bibliothèque peut (aucun, le bord, la totalité de l'écran). L'exemple que vous donnez (youtube) n'est pas valide, Il n'utilise pas de nav tiroir, je dirais qu'ils utilisent coulissantes menu lib. Google+ est-ce que l'utilisation de la nouvelle nav tiroir, et si vous essayez, zone de l'écran pour glisser est même mince bordure gauche.
youtube dispose d'un tiroir de navigation. peut-être qu'il n'a pas le même aspect, mais il fonctionne. peut-être que vous devriez mettre à jour l'application. sinon, vous pouvez essayer de "courants" par google. de toute façon, ma question est comment puis-je le rendre personnalisable, de sorte que je peux contrôler où pour déclencher la navigation tiroir de défilement?
Ok j'ai trouvé la réponse. n'est malheureusement pas possible. Juste 20dp à partir du bord:
Give the user a quick peek If the user touches the very left edge of the screen (within 20 dp from the left), have the drawer peek out as soon as the finger makes contact with the display. This promotes accidental discovery and provides richer feedback.
Regarder ici. Dans ce cas, vous devez avoir une autre façon de déterminer le toucher dans la zone de signalisation wnt et de déclencher le tiroir en utilisant mDrawerLayout.openDrawer(mDrawer)
OriginalL'auteur android developer | 2013-07-17
Vous devez vous connecter pour publier un commentaire.
SlidingMenu est meilleur glissement de la bibliothèque que j'ai jamais trouvé, C'est une très bonne bibliothèque.
Vous pouvez définir
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN)
permettant laventure, pour l'ensemble de l'écran.Oui! Il est intégré avec actionbarsherlock de la bibliothèque, comme je le dis dans ma réponse, vous pouvez `setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN), qui contrôle si le SlidingMenu peut être ouvert avec un geste de balayage
Autre option de personnalisation sont
mSlidingMenu.setShadowWidthRes()
,mSlidingMenu.setShadowDrawable()
,mSlidingMenu.setBehindWidthRes()
,mSlidingMenu.setFadeDegree()
un la comme. J'ai essayé presque tous de glissement menu bibliothèques sur github. SlidingMenu est le meilleur de loindonc, ce que je peux le faire que si (par exemple) je veux que lorsque le doigt touche sur la gauche de la moitié de l'écran, il montrerait le tiroir, mais si c'est sur la moitié droite de l'écran, il ne sera pas?
je tiens également à être en mesure de personnaliser le tiroir à des points de vue que je veux. prend-il en charge comme la bibliothèque, j'ai montré?
OriginalL'auteur Sadegh
Le problème est que DrawerLayout utilise ViewDragHelper qui a un par défaut EDGE_SIZE de 20dp qui est utilisé pour calculer la mEdgeSize comme ceci:
Ici est une fonction qui définit mEdgeSize à un pourcentage de la largeur de l'affichage:
Donc, disons que vous voulez de 30% de votre bord gauche de réagir à des événements glissière et ouvrir le Tiroir de Navigation, puis il suffit d'appeler:
J'ai essayé avec 0,7 f ici et le clic long. La vitesse de l'animation est toujours "bien" pour moi (je suis sur un S3). Mais, je suppose que la durée de l'animation est fixe, et donc d'animer le tiroir beaucoup plus dans la même affaire de temps - il suffit de se déplacer plus rapidement. Remarque: j'ai utilisé le "getSize (..)" le but, comme je suis sur un récent API de niveau.
longue cliquant ne doit pas déclencher montrant le glissement du tiroir. le mouvement du tiroir se déplace d'une façon bizarre, et c'est dur pour moi de l'expliquer. J'ai aussi SGS3 . sur getSize(), vous devez activer les Peluches des contrôles sur enregistrer, de sorte qu'il va vous en avertir en utilisant trop de nouvelles fonctions/classes . le targetSdk dans le manifeste doit être le dernier (le 19 maintenant) mais le minSdk peut-être ce que vous souhaitez soutenir (8 ou 9 couvre près de 100% ).
Oui clic long devrait percer le tiroir - il est mentionné ici par exemple plus.google.com/+AdamWPowell/posts/8j2GVw72i1E. Ou, voulez-vous dire qu'il ne devrait coup d'oeil lorsque vous cliquez sur sur le bord? Et oui, j'ai mis "minSdkVersion=14' sur le but. Ces jours-réglage de l'API de 8 (ou 9) génère trop de compatibilité de douleur par rapport à la part de marché de l'OMI.
OriginalL'auteur Espen Riskedal
J'ai essayé de changer par défaut EDGE_SIZE solution, et rencontré le long cliquant problème aussi.
Enfin, Ifound remplacer dispatchTouchEvent et ouvrir le tiroir en fonction du glissement de la direction par le calcul de décalage sur X.
OriginalL'auteur seauniv
En utilisant l'aide des autres: (première) (deuxième)
J'ai trouvé que l'utilisation de réflexions, il est réalisable de modifier le défaut 20dp écran de pointe pour le tiroir menu de glisser
Après la déclaration du contenu et des tiroirs, vous pouvez le faire:
Bien, Ça fonctionne pour moi l'homme!
bien, 1. oui c'est risqué aussi longtemps que vous n'avez pas l'attraper correctement toutes les exceptions, dans le cas où quelque chose ne fonctionne pas comme prévu, vous devez être préparé avec un plan B (qui serait par défaut 20-dp dans ce cas, ou tout simplement sur le bouton home). Ce serait génial d'étendre et de remplacer les méthodes, la question est, nous n'avons pas accès complet à elle, pas opensource. 🙁 2. J'ai remarqué qu'ainsi, Il montre que certains d'appoint avec de l'espace, après tout défilement 3. Vous pouvez essayer, mais vous serait de perdre l'affectation de l'espace dans la mémoire de l'initialisation de toutes les variables que vous allez utiliser à l'intérieur de la try{} partie, pas un grand bien.
1. en fait, il est open source. j'ai mis à jour la question d'inclure le chemin d'accès aux fichiers. 2. il doit y avoir une meilleure façon. 3. dans ce petit échantillon, vous n'avez pas besoin de variables dans le cas où il a échoué dans toutes les étapes.
Cet exemple de code saute directement à la NoSuchFieldException sur mon kitkat HTC One.
OriginalL'auteur unmultimedio
Vous pouvez l'utiliser avec Tiroir de Navigation
Merci pour cette astuce! J'ai amélioré un peu dans une autre réponse ci-dessous.
pourquoi ne pas l'avoir mise à jour de la réponse actuelle?
génial. Merci!!!!
OriginalL'auteur moallemi
À l'aide de ce projet SlidingMenu vous pouvez arriver à cet effet et de les intégrer à ActionBarSherlock.
Glisser le menu de gauche à droite, juste personnaliser le menu lors de la création et de l'ajouter:
Espère que cette aide.
La région est la marge de l'écran, il suffit de glisser près du bord ou de l'extérieur de l'écran et il fonctionne comme un charme. C'est en effet une autre bibliothèque, j'ai été en utilisant ce depuis avant google a introduit le DrawerLayout et c'est très bon. Vous avez dit que votre bibliothèque n'est pas encore tout à fait fini, donc je ne vous fourni une alternative.
je tiens à le personnaliser, par exemple comme sur le courant et youtube.
OriginalL'auteur Mikel
Tout d'abord, je ne suis pas sûr de ce que tu veux dire à propos de ActionBarSherlock ne supportant pas la DrawerLayout. Vous pouvez travailler avec le DrawerLayout et ActionBarSherlock très heureux, j'ai des applications qui sont à l'aide de cette combinaison. Vous aurez besoin de changer le soutien jar version, mais j'ai trouvé que ActionbarSherlock n'ont pas de problème avec cela.
Mettre en œuvre DrawerLayout de la manière habituelle. Puis dans votre fragment de mettre en œuvre onTouchEvent ou interceptTouchEvent et quand le type est un 'move', le type d'événement de glissement de la gauche vers la droite, vous pouvez appeler la openDrawer méthode sur la DrawerLayout. Vous aurez besoin d'ajouter à la manipulation de la distance que le doigt se déplace à assurez-vous que l'appel pour ouvrir le tiroir n'est pas trop sensible.
Cette fonctionnalité est différente de la fonctionnalité de la DrawerLayout. Est-il une raison particulière pour ne pas vouloir utiliser le Tiroir de Mise en page? Vous allez rendre la vie beaucoup plus difficile pour vous-même en essayant de mettre en œuvre votre propre tiroir. Pour des informations sur la manière d'aborder ce prendre un coup d'oeil à cette série de billets de Cyril Mottier sur la façon dont il a mis en place le tiroir dans Prixing. cyrilmottier.com/2012/05/22/...
je n'ai pas dit que je ne souhaite pas l'utiliser. en fait, j'ai demandé comment l'utiliser ET avoir cette fonctionnalité de choisir par où commencer le faisant glisser.
OriginalL'auteur Phil H
Quand on remplacer la valeur par défaut de la largeur de notre écran de la partie sur laquelle il recouvre des arrêts de travail, j'ai utilisé le code ci-dessus dans viewpager mais maintenant, quand je scroll vers la gauche de la droite au lieu de venir en vue suivante de la page il reste constante. Quelle sera la solution? J'ai utilisé
setDrawerLeftEdgeSize(this,mDrawerLayout,distance );
même que ci-dessus..
OriginalL'auteur Durgesh Kumar