2013-08-23 4 views
6

के साथ ड्रॉवरलेआउट को क्यों लॉक नहीं कर सकता हूं, मैं ड्रॉवरलाउट का उपयोग करता हूं और हाल ही में मैं सूची के गुरुत्वाकर्षण को बदलना चाहता हूं। लेकिन उसके बाद मैं android:layout_gravity="start" से android:layout_gravity="start|bottom" को ListView की गंभीरता को बदलने के लिए, 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> 

`

का कोई भी सुराग कारण है कि मैं अन्य gravities साथ ताला मोड का उपयोग नहीं कर सकते?

धन्यवाद!

उत्तर

16

documentation के आधार पर, केवल उपलब्ध gravities कि इस्तेमाल किया जा सकता Gravity.LEFT, Gravity.RIGHT या GravityCompat.START, GravityCompat.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 (लेकिन एक का उपयोग करता है को देखते हुए GravityCompat विधि, इसलिए START और END उचित अनुवाद किया जाना चाहिए)।

इसका मतलब यह होगा कि "start|bottom" की गुरुत्वाकर्षण स्थापित करके, आप एक अवैध गुरुत्वाकर्षण पेश कर रहे हैं, जो कुछ भी करने के लिए setDrawerLockMode() का कारण बनता है।

+2

धन्यवाद। मैंने पहले ही इस समस्या को किसी अन्य लेआउट में सूची दृश्य जोड़ना तय कर दिया है। लेकिन यह कोड मेरे प्रश्न बताता है। –

+0

आपका स्वागत है! आप जो हासिल करना चाहते थे उसके लिए एक विकल्प खोजने पर बधाई :-) –

+0

सही उत्तर, लेकिन उन्हें 'END' और 'START' का भी समर्थन करना चाहिए –

संबंधित मुद्दे