我使用DrawerLayout,最近我想改变drawerLayout中listView的重力。但是在我将 listView 的重力更改为android:layout_gravity="start|bottom"from 后android:layout_gravity="start",drawerLayout 无法锁定到
android:layout_gravity="start|bottom"
android:layout_gravity="start"
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。
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应该适当地翻译)。
LEFT
RIGHT
GravityCompat
START
END
这意味着通过将重力设置为"start|bottom",您将引入无效的重力,这会导致setDrawerLockMode()什么也不做。
"start|bottom"
setDrawerLockMode()