2013-10-25 12 views
5

mam setup DrawerLayout z szuflady po obu stronachNavigationDrawer wyłączyć przesuń w prawo

<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" /> 

Prawo szuflada jest wypełniona, gdy pewna metoda jest prowadzony, jednak wcześniej, że metoda jest prowadzony mogę przesunąć palcem od prawej strony i ekran przyciemnia się, ale nic nie pokazuje (ponieważ układ jest pusty, dopóki metoda nie zostanie uruchomiona).

Jak mogę wyłączyć przesuwanie od prawej do momentu uruchomienia metody? Widziałem rozwiązania, które w pełni wyłączają przesuwanie, ale to nie zadziała, ponieważ lewa szuflada musi zawsze działać (funkcja ustawiania prawego rysowania jest wywoływana, gdy wybrana jest określona opcja w lewej szufladzie).

Czy istnieje lepszy sposób na zrobienie tego? Może dynamicznie dodaje prawo FrameLayout, gdy funkcja jest uruchamiana?

Odpowiedz

8

Wyłącza bezstykowa:

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

i umożliwienia przeciągania:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
4

nieco zaktualizowaną odpowiedź. Musisz przejść prawą szufladę, aby wyłączyć przesuwanie palcem po niej.

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

można również wykonać "mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);' –

4

Wystarczy wspomnieć o interesującej obserwacji.

W przypadku korzystania strukturę układu na lewo i prawo po menu boczne jak ten:

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

Będziesz mieć jakiś trudny czas próbuje wyłączyć tylko jeden z boku menu ze stwierdzeniami takimi jak ten:

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

to zablokuje cały DrawerLayout i nie będzie w stanie przesunąć ani z menu boczne .

W ten sposób metoda zaproponowana przez @Alberto Maluje, pod jedną z powyższych odpowiedzi, zapewni większą elastyczność.

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

Powiązane problemy