NavigationDrawer отключить свайп вправо

У меня есть установка DrawerLayout с выдвижным ящиком с обеих сторон

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

Правый ящик заполняется при запуске определенного метода, однако до запуска этого метода я могу провести пальцем справа, и экран тускнеет, но ничего не отображается (поскольку макет пуст до тех пор, пока метод не будет запущен).

Как я могу отключить свайп справа, пока метод не будет запущен? Я видел решения для полного отключения любого смахивания, но это не сработало бы для меня, поскольку левый ящик должен работать всегда (функция настройки правого рисования вызывается, когда в левом ящике выбран определенный параметр).

Или есть ли лучший способ сделать это? Может быть, динамическое добавление правильного FrameLayout при запуске функции?


person TMH    schedule 25.10.2013    source источник


Ответы (3)


Это отключает пролистывание:

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

И чтобы включить прокрутку:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
person Kevin van Mierlo    schedule 25.10.2013

Немного обновленный ответ. Вам нужно пройти правый вид ящика, чтобы отключить прокрутку по нему.

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, findViewById(R.id.right_drawer));
person Amit    schedule 12.02.2014
comment
также вы можете сделать mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); - person Alberto Maluje; 05.04.2016

Просто отмечу интересное наблюдение.

Если вы используете структуру макета для левого и правого меню, подобного этому:

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

You're gonna have some hard time trying to disable only one of the side menus with statements like this one:

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

Это заблокирует весь DrawerLayout, и вы не сможете прокручивать ни одно из боковых меню.

Таким образом, метод, предложенный @Alberto Maluje в одном из ответов выше, даст вам больше гибкости.

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

person Todor Kostov    schedule 06.04.2016