Wie wird das DrawerLayout beim Verschieben von links nach rechts angezeigt, egal wo?

8

Hintergrund

google hat das DrawerLayout eingeführt, das ein Menü auf der linken Seite des Bildschirms anzeigt, wenn Sie auf den "up" -Button der Aktionsleiste klicken.

Da die Bibliothek noch nicht auf actionBarSherlock unterstützt wird, gibt es bereits eine Möglichkeit, sie zu umgehen, indem Sie dieses Projekt .

es hat bereits Varianten für viele Apps: Strömungen, Gmail, Hangouts, Youtube ...

die Frage

in der App "current" (und in youtube), wenn der Benutzer die (linke) Seite von links nach rechts verschiebt, wird das DrawerLayout angezeigt, egal, wo der Finger die Berührung gestartet hat .

Wie kann ich den gleichen Effekt erzielen? vielleicht sollte ich onInterceptTouchEvent verwenden?

Es gibt nicht viel Dokumentation und Tutorials, welche coolen Dinge möglich sind, außer diesem Link (ok und auch dieses ). Sie sagen (in dem Teil von "Gib dem Benutzer einen kurzen Blick"), dass etwa 20dp auf der linken Seite für diese Funktionalität verwendet wird, aber ich kann sehen, dass "Ströme" mit viel größerer Fläche arbeiten.

es scheint, die Bibliothek ist noch nicht ganz fertig, und so kann die Layout-XML-Datei nicht einmal im visuellen UI-Editor angezeigt werden ...

EDIT: Es scheint, dass die Bibliothek Open Source ist. Code ist verfügbar auf:

%Vor%

jetzt ist die Frage, wie es funktioniert, wie ich geschrieben habe, so dass es wie auf youtube funktionieren würde, uns erlauben, anzupassen, wie es aussieht und von wo man es scrollen kann.

    
android developer 17.07.2013, 12:33
quelle

8 Antworten

8

SlidingMenu ist die beste Schiebe-Bibliothek, die ich jemals gefunden habe, es ist eine sehr gute Bibliothek.
Sie können getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN) aktivieren Fling für alle Bildschirm einstellen.

    
Sadegh 23.07.2013, 16:32
quelle
3

Das Problem ist, dass DrawerLayout ViewDragHelper verwendet, das eine Standard EDGE_SIZE von 20dp, mit dem die mEdgeSize wie folgt berechnet wird:

%Vor%

Hier ist eine Funktion, die mEdgeSize auf einen Prozentsatz der Anzeigebreite setzt:

%Vor%

Nehmen wir an, Sie möchten, dass 30% Ihrer linken Kante auf Diaereignisse reagieren und die Navigationsleiste öffnen. Rufen Sie dann einfach:

auf %Vor%     
Espen Riskedal 14.11.2013 18:38
quelle
3

Ich habe versucht, die standardmäßige EDGE_SIZE-Lösung zu ändern, und habe auch auf das Problem mit dem langen Klicken gestoßen. Schließlich Ifound override dispatchTouchEvent und Schublade abhängig von der Schieberichtung durch Berechnung von X-Offset zu öffnen.

%Vor%     
seauniv 19.12.2014 07:17
quelle
2

Indem Sie die Hilfe anderer nutzen: (first) (zweites)

Ich habe festgestellt, dass es mit Hilfe von Reflexionen möglich ist, die defekte 20dp-Bildschirmkante zu ändern, damit das Schubladenmenü verschoben werden kann

Nach dem Deklarieren von Inhalten und Schubladen können Sie Folgendes tun:

%Vor%

Nun, es funktioniert für mich, Mann!

    
unmultimedio 29.07.2013 20:13
quelle
2

Sie können dies mit Navigationsschublade

verwenden %Vor%     
moallemi 04.11.2013 09:21
quelle
1

Mit diesem Projekt SlidingMenu können Sie diesen Effekt erzielen und mit ActionBarSherlock integrieren.

Um das Menü von links nach rechts zu verschieben, passen Sie das Menü bei der Erstellung an und fügen Sie Folgendes hinzu:

%Vor%

Hoffe, das hilft.

    
Mikel 17.07.2013 12:49
quelle
1

Erstens bin ich mir nicht sicher, was Sie damit meinen, dass ActionBarSherlock DrawerLayout nicht unterstützt. Du kannst ziemlich glücklich mit dem DrawerLayout und ActionBarSherlock arbeiten, ich habe Apps, die diese Kombination verwenden. Sie müssen die Support-Jar-Version ändern, aber ich habe festgestellt, dass ActionbarSherlock damit kein Problem hat.

Implementieren Sie DrawerLayout auf die übliche Weise. Aktivieren Sie dann in Ihrem Fragment onTouchEvent oder interceptTouchEvent, und wenn der Typ ein Ereignis vom Typ move ist, das von links nach rechts verschoben wird, können Sie die openDrawer-Methode für DrawerLayout aufrufen. Sie müssen für die Entfernung, die der Finger zurücklegt, eine Handhabung hinzufügen, um sicherzustellen, dass der Aufruf zum Öffnen der Schublade nicht zu empfindlich ist.

    
Phil H 25.07.2013 09:37
quelle
1

Wenn wir die Standardkantenseite überschreiben, wird der Bildschirm des Abschnitts, auf dem er überlappt, nicht mehr funktionieren. Ich habe den obigen Code in viewpager verwendet, aber jetzt, wenn ich von rechts nach links blättrele, bleibt die nächste Seite unverändert. Was wird die Lösung dafür sein? Ich habe setDrawerLeftEdgeSize(this,mDrawerLayout,distance );

benutzt %Vor%

wie oben ..

    
Durgesh Kumar 06.01.2015 08:05
quelle