2013-06-07 3 views
31

Ich benutze die neue Navigationsschublade in meiner App. Es ist großartig, außer dass ich keine einfache Methode gefunden habe, wie die Schublade geöffnet ist. Das Standardverhalten wird vom linken Rand des Bildschirms gezogen, um zu öffnen. Dies ist in Ordnung, es sei denn, das Telefon/Tisch hat einen Fall und die Kante des Telefons kann nicht berührt werden. Ich möchte dem Benutzer erlauben, zu berühren und von einem Rand des Bildschirms nach links zu ziehen. Dies ist mit anderen nav drawer libs (Sliding lib) einfach einzustellen. Ich habe leider nichts mit Google's lib gesehen.Drag Rand für Android Navigationsschublade setzen

Es gibt eine onTouchEvent() - Methode für das NavigationLayout, die möglicherweise verwendet werden kann. Natürlich könnte man alle Berührungsereignisse abhören und einen openDrawer auslösen, hoffte aber auf einen einfachen Weg mit weniger Code. Irgendwelche Ideen?

+0

+1 Ich bin auch daran interessiert findet diese in herauszufinden. – bbedward

Antwort

61

Hier habe ich eine Lösung über Reflexionen

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 
+1

Hack funktioniert nicht wirklich, besonders wenn der Inhalt ViewPager ist. Wenn Sie mit NavigationDrawer nach links wischen, wechselt ViewPager nicht von Ansicht 0 zu Ansicht 1. Alle Ereignisse werden von NavigationDrawer verbraucht. –

+3

@ CheokYanCheng Das ist offensichtlich. Du kannst es nicht auf beide Arten haben :) – Saket

+0

@Maxim: Ich teste mit Android 5.0 und es funktioniert nicht reibungslos. Wenn Sie in der Nähe des mittleren Bildschirms rutschen, konnte sich der linke Bildschirm nicht nach rechts bewegen! – Phuong