2013-08-23 25 views
6

我使用DrawerLayout,最近我想改變drawerLayout中listView的引力。但之後,我從android:layout_gravity="start"改變的ListView重力android:layout_gravity="start|bottom",drawerLayout不能鎖爲什麼我無法鎖定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> 

`

的任何線索,爲什麼我不能用與其他比重鎖定模式?

謝謝!

回答

16

基於該documentation,可以使用的唯一可用比重是Gravity.LEFTGravity.RIGHTGravityCompat.STARTGravityCompat.END

(重點煤礦):

抽屜定位和佈局是使用 機器人控制:到你想要的抽屜,從出現的觀點 側對應於子視圖layout_gravity屬性:。 (或者開始/在支持佈局方向平臺版本端。)

綜觀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 
    } 
} 

的方法本身,如果僅檢查重力是LEFTRIGHT(但使用GravityCompat方法,所以STARTEND應適當翻譯)。

這將意味着通過設置"start|bottom"的重力,您引入了無效重力,這導致setDrawerLockMode()無法執行任何操作。

+2

謝謝。我已經解決了將列表視圖添加到另一個佈局的問題。但是這段代碼解釋了我的問題。 –

+0

不客氣!恭喜找到你想達到的替代方案:-) –

+0

正確的答案,但他們也應該支持'END'和'START' –

相關問題