नेविगेशन व्यू और कस्टम लेआउट


83

मैं NavigationViewइस तरह डिजाइन समर्थन पुस्तकालयों का उपयोग कर रहा हूँ :

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

    <!-- put your main layout here -->
    <include layout="@layout/drawer_main_layout"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/drawer_view"/>

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

और मैंने यह मेनू सेट किया है:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="Home" />
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="Messages" />
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="Friends" />
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="Discussion" />
    </group>

    <item android:title="Sub items">
        <menu>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="Sub item 1" />
            <item
                android:icon="@drawable/ic_forum"
                android:title="Sub item 2" />
        </menu>
    </item>

</menu>

वहाँ एक मेनू के बजाय एक लेआउट के साथ NavigationView का उपयोग करने का कोई तरीका है?


क्या आप सिर्फ हेडर व्यू, nav_header फ़ाइल का उपयोग नहीं कर सकते हैं?
RuAware

मुझे हेडर का दृश्य चाहिए और मैं कस्टम लेआउट का उपयोग करने के लिए मेनू के बजाय चाहता
हूं

जवाबों:


187

यहां बताया गया है कि मैंने इसे कैसे हल किया, और पूरी तरह से काम किया:

<android.support.design.widget.NavigationView
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true">

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

        <include layout="@layout/nav_header" />

        <ListView
            android:id="@+id/lst_menu_items"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
</android.support.design.widget.NavigationView>

सवर्श्रेष्ठ तरीका! मैं इसे ढूंढते-ढूंढते थक गया था लेकिन मुझे बेवकूफ समझकर मैंने समापन टैग का विस्तार करने की कोशिश क्यों नहीं की! अच्छा है! मुझे वास्तव में एक खोज योग्य सूची दृश्य की आवश्यकता थी!
sud007

2
क्या यह हेडरव्यू को स्टेटस बार नहीं खींचता है?
marilion91

हां, निश्चित रूप से, यह अभी भी नेविगेशन व्यू का एक हिस्सा है।
हम्जेह सोबोह

यह एकमात्र XML आधारित कार्य समाधान है जो मैंने अब तक पाया है। +1
मचनोवका

क्या कोई इस समाधान के लिए संदर्भ लिंक दे सकता है? क्योंकि मैंने यह कोशिश की थी लेकिन समस्या हो रही थी।
realpranav

34

हां आप कर सकते हैं .... जैसा कि मैंने किया है ... बस अपने कस्टम लेआउट को नेविगेशन व्यू के अंदर ले जाएं

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.NavigationView
        android:id="@+id/navView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start">

        <ListView
            android:entries="@array/test"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </android.support.design.widget.NavigationView>

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

मेरे लिए ऊपर दिए गए कोड काम ... लेकिन दूर करने के लिए मत भूलना app:menuसे NavigationView। अन्यथा यह मेनू आइटम पर आपके कस्टम दृश्य को ओवरलैप करेगा।


1
सूची का शीर्षक शीर्ष पर दिखाई दे रहा है। इसे हेडव्यू के नीचे कैसे रखें?
सुधेश मोहन

यदि आप ListViewचाइल्ड व्यू के रूप में उपयोग कर रहे हैं तो आप NavigationView'sहैडर का उपयोग नहीं कर सकते हैं । इसलिए यदि आप उपयोग कर रहे हैं तो आप ListViewशीर्ष लेख में जोड़ सकते हैं ListView
मोइनखान

1
जब मैंने लिस्टव्यू में हेडवर्व्यू जोड़ा, हेडर्व्यू गायब हो गया। कोड <ListView ऐप: हैडरलैटआउट = "@ लेआउट / नेवीहेडर" एंड्रॉइड: प्रविष्टियां = "@ सरणी / परीक्षण" एंड्रॉइड: लेआउट_प्रकार = "मैच_परेंट" एंड्रॉइड: लेआउट_हाइट = "मैच_परेंट" /
मोहन

भाई वर्तमान में डिजाइन समर्थन पुस्तकालय छोटी गाड़ी है ... आप इसे कर सकते हैं। यदि आप हेडवर्व्यू जोड़ना चाहते हैं तो आप इसे बढ़ाएँ और सूची में प्रोग्रामेटिक रूप से जोड़ें ..
मोइनखान

7
अगर हम अभी तक अब तक कर रहे हैं, तो एक कस्टम पंक्ति के साथ इसके अंदर ListView का उपयोग करें, तो क्या नेविगेशन दृश्य अधिक देता है?
डेविड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.