为什么我无法用布局重力锁定DrawerLayout

我使用DrawerLayout,最近我想改变drawerLayout中listView的重力。 但是我将listView的重力改为android:layout_gravity="start|bottom"来自android:layout_gravity="start" ,drawerLayout无法锁定到

 mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

setDrawerLockMode()使用;

      

但它没有锁定;

      

`

任何线索为什么我不能使用其他重力的锁模式?

谢谢!

根据文档 ,可以使用的唯一可用重力是Gravity.LEFTGravity.RIGHTGravityCompat.STARTGravityCompat.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 } } 

该方法本身仅检查重力是否为LEFTRIGHT (但使用GravityCompat方法,因此应适当地翻译STARTEND )。

这意味着通过设置"start|bottom"的引力,您将引入无效的引力,这会导致setDrawerLockMode()不执行任何操作。