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

时间:2013-08-23 23:02:19

标签: android listview gravity drawerlayout

我使用DrawerLayout,最近我想在drawerLayout中更改listView的重力。但是在我将listView的重力从android:layout_gravity="start|bottom"更改为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>

`

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

谢谢!

1 个答案:

答案 0 :(得分:18)

根据documentation,可以使用的可用重力是Gravity.LEFTGravity.RIGHTGravityCompat.START,{{1} }。

(强调我的):

  

使用。控制抽屉定位和布局   android:layout_gravity属性对应于子视图   您希望抽屉出现的视图的一侧:左侧右侧。   (或支持布局方向的平台版本上的开始/结束。)

查看source code

GravityCompat.END

该方法本身仅检查重力是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方法,因此应GravityCompatSTART进行适当的翻译)。

这意味着通过设置END的引力,您会引入无效的引力,导致"start|bottom"无效。