为啥我不能用布局重力锁定 DrawerLayout
Posted
技术标签:
【中文标题】为啥我不能用布局重力锁定 DrawerLayout【英文标题】:Why i can't lock DrawerLayout with layout gravity为什么我不能用布局重力锁定 DrawerLayout 【发布时间】:2013-08-27 02:41:39 【问题描述】:我使用DrawerLayout,最近我想改变drawerLayout 中listView 的重力。但是在我将listView的重力从android:layout_gravity="start"
更改为android:layout_gravity="start|bottom"
后,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_
android:layout_ >
<RelativeLayout
android:layout_
android:layout_ >
</RelativeLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_
android:layout_
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_
android:layout_ >
<RelativeLayout
android:layout_
android:layout_ >
</RelativeLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_
android:layout_
android:layout_gravity="start|bottom"
android:background="#F3F3F4"
android:choiceMode="singleChoice" >
</ListView>
`
任何关于为什么我不能在其他重力下使用锁定模式的线索?
谢谢!
【问题讨论】:
另外,为了处理重力,请在此处检查我的答案:***.com/a/50304856/2873702 【参考方案1】:基于documentation,可以使用的唯一重力是Gravity.LEFT
、Gravity.RIGHT
或GravityCompat.START
、GravityCompat.END
。
(强调我的):
抽屉的定位和布局由 子视图上的 android:layout_gravity 属性对应于哪个 您希望抽屉出现的视图一侧:left 或 right。 (或者在支持布局方向的平台版本上开始/结束。)
看着source code
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()
什么都不做。
【讨论】:
谢谢。我已经解决了这个问题,将列表视图添加到另一个布局中。但是这段代码解释了我的问题。 不客气!恭喜您找到了您想要实现的替代方案:-) 正确答案,但他们也应该支持END
和START
以上是关于为啥我不能用布局重力锁定 DrawerLayout的主要内容,如果未能解决你的问题,请参考以下文章