为什么我不能用布局重力锁定 DrawerLayout
我使用DrawerLayout,最近我想改变drawerLayout中listView的重力。但是在我将 listView 的重力更改为android:layout_gravity="start|bottom"
from 后android:layout_gravity="start"
,drawerLayout 无法锁定到
mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
setDrawerLockMode() 使用;
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#F3F3F4"
android:choiceMode="singleChoice" >
</ListView>
但它不会锁定;
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="start|bottom"
android:background="#F3F3F4"
android:choiceMode="singleChoice" >
</ListView>
`
为什么我不能将锁定模式与其他重力一起使用的任何线索?
谢谢!
-
根据文档,可以使用的唯一
Gravity.LEFT
可用重力是,Gravity.RIGHT
或GravityCompat.START
,GravityCompat.END
。(强调我的):
抽屉定位和布局是使用子视图上的 android:layout_gravity 属性控制的,对应于您希望抽屉从视图的哪一侧出现:左或右。(或在支持布局方向的平台版本上开始/结束。)
看源代码
public void setDrawerLockMode(int lockMode, int edgeGravity) { final int absGrav = GravityCompat.getAbsoluteGravity(edgeGravity, ViewCompat.getLayoutDirection(this)); if (absGrav == Gravity.LEFT) { mLockModeLeft = lockMode; } else if (absGrav == Gravity.RIGHT) { mLockModeRight = lockMode; } if (lockMode != LOCK_MODE_UNLOCKED) { // Cancel interaction in progress final ViewDragHelper helper = absGrav == Gravity.LEFT ? mLeftDragger : mRightDragger; helper.cancel(); } switch (lockMode) { case LOCK_MODE_LOCKED_OPEN: final View toOpen = findDrawerWithGravity(absGrav); if (toOpen != null) { openDrawer(toOpen); } break; case LOCK_MODE_LOCKED_CLOSED: final View toClose = findDrawerWithGravity(absGrav); if (toClose != null) { closeDrawer(toClose); } break; // default: do nothing } }
该方法本身仅检查重力是否为
LEFT
或RIGHT
(但使用一种GravityCompat
方法,因此START
并且END
应该适当地翻译)。这意味着通过将重力设置为
"start|bottom"
,您将引入无效的重力,这会导致setDrawerLockMode()
什么也不做。