2013-06-07 17 views
31

Sto utilizzando il nuovo Navigation Drawer nella mia app. È fantastico, tranne che non ho trovato un modo semplice per impostare come il cassetto è aperto. Il comportamento predefinito è trascinare dal bordo sinistro dello schermo per aprire. Questo va bene, a meno che il telefono/il tavolo non abbia una custodia e il bordo del telefono non possa essere toccato. Vorrei consentire all'utente di toccare e trascinare da un margine dello schermo a sinistra. Questo è facile da impostare con altre librerie di nav (lib scorrevole). Sfortunatamente non ho visto nulla con la lib di Google.Imposta margine di trascinamento per Android Navigation Drawer

Esiste un metodo onTouchEvent() per il NavigationLayout che potrebbe essere utilizzato. Naturalmente puoi ascoltare tutti gli eventi touch e attivare un openDrawer, ma speravo in un modo semplice con meno codice. Qualche idea?

+0

+1 Mi interessa capire questo fuori anche. – bbedward

risposta

61

Qui ho trovato una soluzione tramite riflessioni

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 non funziona davvero particolarmente quando il suo contenuto è ViewPager. Quando scorri verso sinistra, con NavigationDrawer, ViewPager non cambierà dalla vista 0 alla vista 1. Tutti gli eventi sono consumati da NavigationDrawer. –

+3

@CheokYanCheng Questo è ovvio. Non puoi avere entrambi i modi :) – Saket

+0

@Maxim: eseguo il test con Android 5.0 e non funziona correttamente. Quando si scorre vicino allo schermo centrale, lo schermo sinistro non può spostarsi a destra di tutti! – Phuong

Problemi correlati