2013-08-23 11 views
6

私はDrawerLayoutを使用しています。最近、私はdrawerLayoutのlistViewの重力を変更したいと思います。私はandroid:layout_gravity="start"からandroid:layout_gravity="start|bottom"にListViewコントロールの重力を変更した後しかし、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.RIGHT又はGravityCompat.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 
    } 
} 

をみるだけチェック重力LEFT又はRIGHTである(ただし、A使用する場合GravityCompatの方法ですので、STARTENDを適切に翻訳する必要があります)。

これは、重力を"start|bottom"に設定すると無効な重力が導入され、setDrawerLockMode()に何もしないことを意味します。

+2

ありがとうございました。私はすでにリストビューを別のレイアウトに追加してこの問題を修正しました。しかし、このコードは私の質問を説明します。 –

+0

あなたは大歓迎です!あなたが達成したいと思っていたものに代わるものを見つけることを祝福しました: –

+0

正解ですが、「END」と「START」もサポートする必要があります –

関連する問題