24

Material Design guide से "मिनी संस्करण" को कैसे सक्षम करें - ताकि केवल बंदर आइकन अपने बंद राज्य में दिखाए जा सकें?एंड्रॉइड.support.v4.widget.DrawerLayout के लिए सामग्री डिजाइन मार्गदर्शिका से सक्षम या नकली मिनी संस्करण कैसे करें?

mini variant

मेरे सवाल के लिए a simple test project जैसा कि मैंने अच्छी तरह से ज्ञात Navigation Drawer Example by Google ले लिया है - और फिर दोनों पक्षों पर सही पक्ष और ListView प्रविष्टियों के लिए माउस पर दूसरी दराज कहा:

screenshot

screenshot

कृपया सलाह दें कि "मिनी वेरिएंट ड्रावर" को सक्रिय करने के लिए (या शायद नकली?) - ताकि केवल एमयू उपरोक्त स्क्रीनशॉट के दाईं ओर सिक प्रतीकों दिखाई दे रहे हैं।

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.v7.widget.Toolbar 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     <ImageView 
      android:src="@drawable/ic_music_note_black_24dp" 
      android:onClick="openActions" 
      android:layout_gravity="right" 
      android:padding="16dp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     </android.support.v7.widget.Toolbar> 

     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

    </LinearLayout> 

    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" /> 

    <ListView 
     android:id="@+id/right_drawer" 
     android:layout_width="160dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="end" 
     android:choiceMode="singleChoice" /> 

</android.support.v4.widget.DrawerLayout> 

और MainActivity.java इसे प्रयोग:

public class MainActivity extends AppCompatActivity { 
    private Toolbar mToolbar; 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ListView mActionList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    private String[] mPlanetTitles; 
    private String[] mActions; 
    private int[] mIcons; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
     mActions = getResources().getStringArray(R.array.music_actions); 

     TypedArray ta = getResources().obtainTypedArray(R.array.music_icons); 
     mIcons = new int[ta.length()]; 
     for (int i = 0; i < mIcons.length; i++) 
      mIcons[i] = ta.getResourceId(i, R.drawable.ic_menu_black_24dp); 
     ta.recycle(); 

     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     mActionList = (ListView) findViewById(R.id.right_drawer); 

     mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, mPlanetTitles) { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       TextView view = (TextView) super.getView(position, convertView, parent); 
       view.setCompoundDrawablePadding(24); 
       view.setCompoundDrawablesWithIntrinsicBounds(
        R.drawable.ic_stars_white_24dp, 0, 0, 0); 
       return view; 
      } 
     }); 

     mActionList.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, mActions) { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       TextView view = (TextView) super.getView(position, convertView, parent); 
       view.setCompoundDrawablePadding(24); 
       view.setCompoundDrawablesWithIntrinsicBounds(mIcons[position], 0, 0, 0); 
       return view; 
      } 
     }); 

     mDrawerToggle = new ActionBarDrawerToggle(
       this,     /* host Activity */ 
       mDrawerLayout,   /* DrawerLayout object */ 
       mToolbar, 
       R.string.drawer_open, /* "open drawer" description for accessibility */ 
       R.string.drawer_close /* "close drawer" description for accessibility */ 
       ) { 
      public void onDrawerClosed(View view) { 
       mToolbar.setTitle(mTitle); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 

      public void onDrawerOpened(View drawerView) { 
       mToolbar.setTitle(mDrawerTitle); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     if (savedInstanceState == null) { 
      selectItem(0); 
     } 
    } 

यहाँ इस मोड में a video showing Gmail for tablets है

यहाँ मेरी लेआउट फ़ाइल activity_main.xml है।

+0

क्या आप वांछित व्यवहार का अधिक स्पष्ट रूप से वर्णन कर सकते हैं? (क्या मिनी ड्रॉवर हमेशा दिखाई देता है? जब आप दराज को दूर करते हैं तो किस संक्रमण का उपयोग किया जाना चाहिए? ...) – Lamorak

+0

हां, हमेशा दिखाई देता है: या तो आइकन केवल (बंद ड्रॉवर) या समान आइकन और टेक्स्ट (जब दराज खोला जाता है)। संक्रमण तब तक कोई फर्क नहीं पड़ता जब तक आप केवल 2 अलग-अलग दराजों की दृश्यता को टॉगल न करें। –

+2

यह टैबलेट पर जीमेल ऐप में देखा जा सकता है। मुझे आशा है कि यह डिज़ाइन समर्थन लाइब्रेरी के साथ नेविगेशन व्यू का हिस्सा होगा। http://www.google.co.in/design/spec/patterns/navigation-drawer.html#navigation- ड्रावर- व्यवहारकर्ता देखें –

उत्तर

7

आधिकारिक नेविगेशन ड्रावर वास्तव में उनके design specification में 'मिनी-वेरिएंट' का उल्लेख करता है, लेकिन इसका उपयोग करने के तरीके के बारे में कोई दस्तावेज़ीकरण नहीं है। शायद यह बाद में समर्थन पुस्तकालय के एक हिस्से के रूप में आएगा। यदि कोई आधिकारिक समाधान होगा तो उत्तर अपडेट करेगा।

, ActionsContentView library पर एक नज़र डालें, ठीक वही है जो आप चाहते हैं। पिछली बार यह अपडेट 2 साल पहले था, लेकिन यह काम करता है, मैंने इसे थोड़ी देर पहले इस्तेमाल किया है। आप इसे Google Play पर भी प्राप्त कर सकते हैं और इसका परीक्षण कर सकते हैं।

Closed state Opened state

4

कृपया लिंक का पालन पर जाएँ:

https://github.com/mikepenz/MaterialDrawer

https://github.com/mikepenz/MaterialDrawer/issues/487

MaterialDrawer सामग्री दराज बनाने के लिए एक कार्यान्वयन है। इसका नवीनतम संस्करण, 4.0, हालांकि अभी तक जारी नहीं हुआ है, जो आप चाहते हैं उसे प्राप्त करने के लिए "एम्बेडेड ड्रॉवर" प्रदान करता है। अभी तक सही नहीं है क्योंकि मैंने अपना डेमो डाउनलोड किया है, इस नई सुविधा की कोशिश की और पाया कि दराज स्लाइडिंग द्वारा नहीं खुल सकता है, लेकिन लेखक इसे खत्म करने के लिए कड़ी मेहनत कर रहे हैं।

नतीजतन, आप जल्द ही रिलीज की प्रतीक्षा कर सकते हैं और उस समय इसका उपयोग जांच सकते हैं।

2

इस अन्य मिनी नेविगेशन प्रश्न को देखें: Implementing Gmail Tablet like Navigation Drawer

ऐसा लगता है कि मिनी नौसेना ड्रॉवर संस्करण के लिए एक कामकाजी समाधान है जैसा कि यह टैबलेट के लिए जीमेल ऐप में पाया गया है क्योंकि @ अमोल गुप्ता ने उल्लेख किया है। अन्य प्रश्न में स्वीकृत उत्तर में blog post का लिंक शामिल है जिसमें मिनी संस्करण को कार्यान्वित करने के बारे में अधिक विस्तृत स्पष्टीकरण दिया गया है। उनका समाधान एक स्लाइडिंग फलक लेआउट का उपयोग करता है जो "आंशिक" लेआउट और "पूर्ण" लेआउट के बीच क्रॉस-फेड करता है।

https://github.com/chiuki/sliding-pane-layout

0

मैं 80dp की तरह अपेक्षाकृत कम संख्या को 240dp से @id/left_drawer की layout_width बदलने के लिए, की सिफारिश करेंगे:

यहाँ के रूप में अच्छी ब्लॉग पोस्ट के उदाहरण स्रोत का लिंक है।

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