2013-10-25 4 views
5

Ich habe DrawerLayout Setup mit einer Schublade, auf beiden SeitenNavigationDrawer deaktivieren rechten Swipe

<FrameLayout android:id="@+id/navigation_drawer" 
    android:layout_width="@dimen/navigation_drawer_width" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" /> 


<FrameLayout android:id="@+id/navigation_drawer_right" 
    android:layout_width="@dimen/navigation_drawer_width" 
    android:layout_height="match_parent" 
    android:layout_gravity="end" /> 

Die rechte Schublade aufgefüllt wird, wenn eine bestimmte Methode ausgeführt wird, jedoch bevor das Verfahren ausgeführt wird I von den rechten Swipe und Der Bildschirm wird abgeblendet, aber nichts wird angezeigt (weil das Layout leer ist, bis die Methode ausgeführt wurde).

Wie kann ich Swipe von rechts deaktivieren, bis die Methode ausgeführt wurde? Ich habe Lösungen gesehen, die das Wischen vollständig deaktivieren, aber das würde für mich nicht funktionieren, da die linke Schublade immer funktionieren muss (die rechte Setup-Funktion wird aufgerufen, wenn eine bestimmte Option in der linken Schublade ausgewählt wird).

Oder würde es einen besseren Weg geben, dies zu tun? Vielleicht dynamisch das richtige FrameLayout hinzufügen, wenn die Funktion ausgeführt wird?

Antwort

8

Dies deaktiviert das Streichen:

mDrawerLayout = (DrawerLayout) findViewById(R.id.navigation_drawer_right); 
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

Und Swipe aktivieren:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
4

Ein bisschen aktualisiert Antwort. Sie müssen die Ansicht der rechten Schublade passieren, um das Wischen zu deaktivieren.

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, findViewById(R.id.right_drawer)); 
+4

können Sie auch 'mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);' –

4

Nur um eine interessante Beobachtung zu erwähnen.

Falls Sie eine Layout-Struktur verwenden für AND wie rechte Seite Menüs verlassen haben diese:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 

<!-- MAIN CONTAINER --> 

    <include layout="@layout/content_home" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/toolbar"/> 


<!-- LEFT SIDE MENU --> 

<RelativeLayout 
    android:id="@+id/left_side_menu" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="start" 
    android:visibility="visible" 
    android:fitsSystemWindows="false" 
    android:background="@color/green"> 


    <!-- put some menu items in here --> 

</RelativeLayout> 



<!-- RIGHT SIDE MENU --> 
<RelativeLayout 
    android:id="@+id/right_side_menu" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="end" 
    android:visibility="visible" 
    android:fitsSystemWindows="false" 
    android:background="@color/gray"> 

    <!-- put some items in here --> 

</RelativeLayout> 

Du wirst haben einige harte Zeit nur eine der Seite zu deaktivieren versucht, Menü mit Aussagen wie diese:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, findViewById(R.id.right_drawer)) 

das wird die ganze DrawerLayout sperrt und Sie werden weder nicht von den Seitenmenüs der Lage sein, Swipe .

Somit bietet Ihnen die von @ Alberto Maluje vorgeschlagene Methode unter einer der obigen Antworten mehr Flexibilität.

mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);