关闭左侧时防止DrawerLayout打开右侧?
Prevent DrawerLayout from opening the right side when closing the left side?
我有一个带两个抽屉的 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 毫秒之类的时间,但我不知道该怎么做。
根据抽屉状态锁定和解锁抽屉打开和关闭
左侧抽屉代码
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);
我有一个带两个抽屉的 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 毫秒之类的时间,但我不知道该怎么做。
根据抽屉状态锁定和解锁抽屉打开和关闭
左侧抽屉代码
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);