关闭左侧时,防止DrawerLayout打开右侧?

问题描述 投票:0回答:1

我有一个带两个抽屉的DrawerLayout,一个在左边,一个在右边。

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <fragment        
        android:id="@+id/mainFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <fragment
        android:id="@+id/leftFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"/>

    <fragment
        android:id="@+id/rightFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="right|end"/>

</android.support.v4.widget.DrawerLayout>

问题是,有时当我向左滑动以关闭左抽屉时,它也会打开右抽屉。

有没有办法防止这种情况发生?我想也许我可以阻止对方打开,直到双方已关闭至少X毫秒或其他什么,但我不知道如何去做。

android android-layout navigation-drawer drawerlayout android-drawer
1个回答
1
投票

根据抽屉状态锁定和取消锁定抽屉的打开和关闭

左侧抽屉代码

mDrawerLayoutLeft.addDrawerListener(new DrawerLayout.DrawerListener() {

        @Override
        public void onDrawerOpened(View drawerView) {
            //lock the right side drawer when open the left drawer
            mDrawerLayoutRight.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        }

        @Override
        public void onDrawerClosed(View drawerView) {
             //unlock the right side drawer when close the left  drawer
            mDrawerLayoutRight.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        }

    });

右侧抽屉的代码

mDrawerLayoutRight.addDrawerListener(new DrawerLayout.DrawerListener() {

        @Override
        public void onDrawerOpened(View drawerView) {
            //lock the left side drawer when open the right  drawer
            mDrawerLayoutLeft.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        }

        @Override
        public void onDrawerClosed(View drawerView) {
             //unlock the left side drawer when close the right drawer
            mDrawerLayoutLeft.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        }

    });

锁定抽屉的其他属性有重力。

使用Gravity.START锁定和解锁

开锁

mDrawerLayoutLeft.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, Gravity.START);

mDrawerLayoutLeft.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.START);

使用Gravity.END锁定和解锁

开锁

mDrawerLayoutLeft.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, Gravity.END);

mDrawerLayoutLeft.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.END);
© www.soinside.com 2019 - 2024. All rights reserved.