কীভাবে নেভিগেশনভিউতে ফুটার যুক্ত করবেন - অ্যান্ড্রয়েড সমর্থন ডিজাইন লাইব্রেরি?


122

আমি কিভাবে ফুটার সেটিংস এবং প্রোফাইল আইটেমগুলিতে সেট করতে পারি NavitationView? ইমেল নেভিগেশন ড্রয়ারের মাধ্যমে ইনবক্সের মতো দেখতে। দ্যNavitationViewআইটেম মেনু রিসোর্চ ব্যবহারের স্ফীত, কিন্তু আমি একটি মেনু রিসোর্স নীচে আইটেম সেট কিভাবে, অথবা আমি একটি কাস্টম দৃশ্য সেট করতে পারেন জানি না NavigationViewবা কোনো নিচ অফসেট? আমি <LinearLayout...>এটিকে ফুটার ভিউ হিসাবে রাখার চেষ্টা করেছি , তবে ছোট পর্দায় ফুটার আইটেমগুলির উপরে রাখে এবং আমি মেনুটি স্ক্রোল করতে পারি না, আমি এখানে একটি ফুটার প্যাডিং সেট করার চেষ্টা করেছি NavigationView, তবে পাদচরণটি প্যাডিংটিও নেয়।

এটি ছোট পর্দায় স্ক্রোল করছে না:

<android.support.design.widget.NavigationView
    android:id="@+id/drawer"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/kuona_drawer_header"
    app:menu="@menu/drawer">

    <LinearLayout...>

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

স্ক্রোলিং নয়

এই স্ক্রোলগুলি, তবে ফুটোটি এর মেনু আইটেমগুলির উপরে রয়েছে:

<android.support.design.widget.NavigationView
    android:id="@+id/drawer"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:paddingBottom="96dp"
    app:headerLayout="@layout/kuona_drawer_header"
    app:menu="@menu/drawer">

    <LinearLayout...>

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

এখানে চিত্র বর্ণনা লিখুন

ড্রয়ার মেনু res/menu/drawer.xmlফাইল:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/action_current_list"
            android:checked="true"
            android:icon="@drawable/ic_current_list"
            android:title="@string/current_list" />
        <item
            android:id="@+id/action_manage_lists"
            android:icon="@drawable/ic_my_lists"
            android:title="@string/my_lists" />
        <item
            android:id="@+id/action_search_products"
            android:icon="@drawable/ic_search_black_24dp"
            android:title="@string/search_products" />
        <item
            android:id="@+id/action_deals"
            android:icon="@drawable/ic_product_promo"
            android:title="@string/deals" />
    </group>
</menu>

আপনি কোন স্থানে @ মেনু / ড্রয়ার ফাইলটি
রেখেছেন

এটা তোলে হয়/res/menu/drawer.xml
epool

মেনু আইটেম হিসাবে আপনি "প্রতিক্রিয়া" এবং "সাইন আউট" করতে না পারার কোনও কারণ আছে? যদি কারণটি হ'ল আপনি "সাইন আউট" এর জন্য মেনু আইকনটি গতিশীল পরিবর্তন করতে চান তবে আপনার এটির সাথে সক্ষম হওয়া উচিত menuItem.setIcon(Drawable)
ক্ষুধারঘাট

এটি কেবল প্রয়োজনীয়তার জন্য এবং ব্যক্তিগতভাবে আমি জানতে চাইছি যে Google কীভাবে উদাহরণস্বরূপ ইনবক্স অ্যাপ্লিকেশনটিতে এটি করে।
এপুল

এই প্রশ্নটি আরও বেশি গুরুত্বপূর্ণ হয়ে উঠেছে 23.1 আপডেটের সাথে
অ্যালেক্স সোরোকোলেটোভ

উত্তর:


151

আপনি যদি আপনার নেভিগেশন মেনুতে একটি স্থির (অ-স্ক্রোলিং) পাদচরণ চান তবে আপনার পোস্টের মতো অন্য লেআউটের চারপাশে নেভিগেশনভিউ মোড়ানো দরকার। নেভিগেশনভিউ ফ্রেমলআউটের মতো কাজ করে, তাই এটি নেভিগেশনভিউ মেনু আইটেমগুলির শীর্ষের অভ্যন্তরীণ বিন্যাসটি "স্ট্যাকিং" শেষ করে। পাদলেখ আইটেমগুলির জন্য লিনিয়ারলআউট ব্যবহার করে এটির ব্যবস্থা করার জন্য এখানে একটি উপায়:

স্থির পাদলেখ

<android.support.design.widget.NavigationView
    android:id="@+id/drawer"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/drawer">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:clickable="true"
        android:orientation="vertical">
        <TextView
            android:id="@+id/footer_item_1"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:gravity="center"
            android:text="Footer Item 1" />
        <TextView
            android:id="@+id/footer_item_2"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:gravity="center"
            android:text="Footer Item 2" />
    </LinearLayout>

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

আমি এই উদাহরণে টেক্সটভিউগুলি ব্যবহার করেছি, তবে আপনি পাদলেখের দর্শনগুলির জন্য যা চান তা ব্যবহার করতে পারেন। মেনুটির নীচে পাদলেখ করা আইটেমগুলি এড়াতে আপনার মেনু রিসোর্স ফাইলের শেষে কিছু ডামি আইটেম যুক্ত করুন (এটি "স্পেসার" এর মতো কাজ করবে):

মাঝামাঝি / মেনু / drawer.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group>
        <item
            android:id="@+id/nav_item_1"
            android:icon="@drawable/ic_nav_item_1"
            android:title="Nav Item 1" />
        <item
            android:id="@+id/nav_item_2"
            android:icon="@drawable/ic_nav_item_2"
            android:title="Nav Item 2" />
        <item
            android:id="@+id/nav_item_3"
            android:icon="@drawable/ic_nav_item_3"
            android:title="Nav Item 3" />
        <item
            android:id="@+id/nav_item_4"
            android:icon="@drawable/ic_nav_item_4"
            android:title="Nav Item 4" />
        <item
            android:id="@+id/footer_spacer_1"
            android:checkable="false"
            android:enabled="false"
            android:orderInCategory="200"
            android:title="" />
        <item
            android:id="@+id/footer_spacer_2"
            android:checkable="false"
            android:enabled="false"
            android:orderInCategory="200"
            android:title="" />
    </group>
</menu>

শেষ অবধি, প্রকৃত পাদলেখ দেখার জন্য আপনার ক্রিয়াকলাপে ক্লিক শ্রোতাদের যুক্ত করতে ভুলবেন না:

...
// Click listener for nav footer.
View navFooter1 = findViewById(R.id.footer_item_1);
navFooter1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do footer action
    }
});
View navFooter2 = findViewById(R.id.footer_item_2);
navFooter2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do footer action
    }
});
...

স্ক্রলিং পাদচরণ

যদি আপনি পাদলেখকে বাকি নেভিগেশনভিউয়ের সাথে স্ক্রোল করার অনুমতি দেন তবে এটি জিনিসগুলিকে আরও সহজ করে তোলে (কোনও অতিরিক্ত বিন্যাস বা শ্রোতার কোনও ক্লিক নেই)। অনন্য হিসাবে কেবল আপনার মেনু রিসোর্স ফাইলে ফুটার আইটেমগুলি যুক্ত করুন <group>(এটি একটি বিভাজক লাইন তৈরি করবে ), এবং সবকিছু স্বয়ংক্রিয়ভাবে পরিচালিত হবে এবং একসাথে স্ক্রোল করবে:

মাঝামাঝি / মেনু / drawer.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:id="@+id/nav_menu">
        <item
            android:id="@+id/nav_item_1"
            android:icon="@drawable/ic_nav_item_1"
            android:title="Nav Item 1" />
        <item
            android:id="@+id/nav_item_2"
            android:icon="@drawable/ic_nav_item_2"
            android:title="Nav Item 2" />
        <item
            android:id="@+id/nav_item_3"
            android:icon="@drawable/ic_nav_item_3"
            android:title="Nav Item 3" />
        <item
            android:id="@+id/nav_item_4"
            android:icon="@drawable/ic_nav_item_4"
            android:title="Nav Item 4" />
    </group>
    <group android:id="@+id/nav_footer">
        <item
            android:id="@+id/nav_footer_1"
            android:icon="@drawable/ic_footer_item_1"
            android:title="Footer Item 1" />
        <item
            android:id="@+id/nav_footer_2"
            android:icon="@drawable/ic_footer_item_2"
            android:title="Footer Item 2" />
    </group>
</menu>

1
এটি কেবল প্রয়োজনীয়তার জন্য এবং ব্যক্তিগতভাবে আমি জানতে চাইছি যে Google কীভাবে উদাহরণস্বরূপ ইনবক্স অ্যাপ্লিকেশনটিতে এটি করে।
এপুল

আমি নিশ্চিত নই যে গুগল এটি জিমেইল অ্যাপে কী করে, তবে উপস্থিতি থেকে মনে হচ্ছে, আমি উত্তরে যা বর্ণনা করেছি ঠিক তেমন দেখাচ্ছে। <group> আপনি যদি একটি বিভাজক রেখা চান তবে একটি পৃথক ব্যবহার করুন , অন্যথায়, Gmail অ্যাপ্লিকেশনটির ন্যাভ ফুটারটি কেবল সাধারণ মেনু আইটেমের মতো দেখায় (কমপক্ষে আমার কাছে)।
ক্ষুধার্ত

1
আহ, আমি এখন বুঝতে পারি। আমি ভেবেছিলাম আপনি জিমেইল অ্যাপের বিষয়ে কথা বলছেন। আমি ইনবক্স অ্যাপটি ইনস্টল করি নি, তবে আপনি যদি কোনও স্ট্যাটিক পাদলেখ সন্ধান করেন তবে আপনি ঠিক বলেছেন, আপনাকে একটি পৃথক বিন্যাস ব্যবহার করতে হবে। যদিও এটি খুব কঠিন হওয়া উচিত নয়। আসুন দেখে নেওয়া যাক ...
ক্ষুধার্তি

7
আপনি মেনুতে ডামি আইটেমগুলি ব্যবহার <dimen name="design_navigation_padding_bottom" tools:override="true">48dp</dimen> করার dimen.xmlপরিবর্তে ব্যবহার করতে পারেন ! এইটা ঠিক আছে !
ওমিড

1
পাদলেখের পাঠ্য প্রদর্শনের জন্য আমি কীভাবে ড্রয়ার আইটেমের ফন্ট এবং ফন্টের আকার সেট করতে পারি?
জেগাদিয়ান এস

37

এটি সমাধান করার উপায়টি আমি আপনাকে কেবল ইঙ্গিত দিয়ে দেব, তবে নেভিগেশনভিউতে এটি পরীক্ষা করার আমার কোনও সুযোগ নেই, এবং এটি নিশ্চিতভাবে কাজ করবে বলে আমি নিশ্চিত

এখানে নমুনা বিন্যাস এক্সএমএল;

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:clipToPadding="false"
  android:paddingBottom="96dp">

  <TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#6F00" />

  <TextView
    android:layout_width="match_parent"
    android:layout_height="96dp"
    android:layout_gravity="bottom"
    android:layout_marginBottom="-96dp"
    android:background="#600F" />

</FrameLayout>

ফলাফল এখানে:

এখানে চিত্র বর্ণনা লিখুন

কৌশলটি হ'ল প্যারেন্টে প্যাডিং প্রয়োগ এবং সন্তানের কাছে বিয়োগ মার্জিন।


দ্রুত চেষ্টা করুন:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.NavigationView 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:layout_gravity="start"
  android:clipToPadding="false"
  android:paddingBottom="96dp"
  app:headerLayout="@layout/sample_header"
  app:menu="@menu/sample_menu">


  <TextView
    android:layout_width="match_parent"
    android:layout_height="96dp"
    android:layout_gravity="bottom"
    android:layout_marginBottom="-96dp"
    android:background="#600F"
    android:gravity="center"
    android:text="I STAND BY MY SELF" />

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

এখানে চিত্র বর্ণনা লিখুন


3
এটি কাজ করতে পারে তবে নেতিবাচক মার্জিনগুলি বেশ হ্যাকি। সুতরাং, ব্যক্তিগতভাবে, আমি যদি সম্ভব হয় এগুলি এড়িয়ে চলি।
ক্ষুধারঘাট

এই পাদচরণ, যদি আপনি দমন করা আইকন কেন্দ্রিক "botom" আপনি পর্দা উপর নির্ভর করে পরিবর্তন করতে পারেন এবং হবে কাটা এই পোস্টটিকে দেখতে পারবেন stackoverflow.com/questions/32460312/...
delive

আপনি পুরো উদাহরণ সম্পর্কে কোনও লিঙ্ক সরবরাহ করতে পারেন?
বিতরণ করুন

আমরা কি এটি স্ক্রোলযোগ্য সেট করতে পারি?
আহমদ শাহওয়াইজ

27

নেস্ট নেভিগেশন ভিউগুলির অন্যান্য উত্তরে বর্ণিত পদ্ধতির অনুসরণ করে কিছু সমস্যা দেখা দিয়েছে:

  • অনেকগুলি আইটেম বা ল্যান্ডস্কেপ মোডে, পাদচরণ মেনু আইটেমগুলির সাথে ওভারল্যাপ হয়ে গেছে
  • যদি আসল মেনুতে প্রচুর আইটেম থাকে তবে নেস্টেড নেভিগেশনভিউটি স্ক্রোলযোগ্য হয়ে উঠল, যা দেখতে সুন্দর লাগছিল না
  • নেস্টিংয়ে দুটি নেভিগেশনভিউ থাকা, কাস্টম দর্শনগুলি পাদলেখ হিসাবে সংজ্ঞায়িত করার অনুমতি দেয় নি।
  • নেস্টেড স্ক্রোলভিউগুলি পরিচালনা করা একটি গোলযোগ ছিল (কখনও কখনও দুটি স্ক্রোলবার ইত্যাদি প্রদর্শিত হয়)
  • স্থির পাদলেখ সর্বদা নীচে থাকতে হবে (কয়েকটি সহ অনেকগুলি মেনু আইটেম সহ)

এই সমস্ত সমস্যার সমাধানের জন্য আমার সমাধানটি ছিল:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>

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

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

        <android.support.v4.widget.NestedScrollView
            ...
            android:fillViewport="true"
            android:scrollbars="vertical">

            <LinearLayout
                ...
                android:orientation="vertical">

                <android.support.design.widget.NavigationView
                    ...
                    app:elevation="0dp"
                    app:headerLayout="@layout/nav_header"
                    app:menu="@menu/nav_menu">
                </android.support.design.widget.NavigationView>

                <LinearLayout
                    android:id="@+id/spacer_to_bottom"
                    ...
                    android:layout_height="0dp"
                    android:layout_weight="1">
                </LinearLayout>

                <include layout="@layout/nav_footer"></include>
            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>
    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

এখানে নেস্টেডস্ক্রোলভিউ উপ-নেভিগেশনভিউয়ের জন্য একটি স্ক্রোলিং প্যারেন্ট হিসাবে কাজ করে। এর অর্থ, সাব-নেভিগেশনভিউ কখনও স্ক্রোলবারগুলি নিজেই দেখায় না, তবে পুরো সামগ্রীটি সমতল উপায়ে প্রদর্শিত হয়।

'স্পেসার_ট_বটম' লেআউটটি বাকী সমস্ত স্থান পূরণ করে, যাতে কয়েকটি মেনু আইকন সহ, পাদচরণটি এখনও নীচে থাকে।

শেষ অবধি, স্থির পাদলেখটি রৈখিক বিন্যাসে যুক্ত করা হয়, যা স্পেসার আসল মেনু (উপ-নেভিগেশনভিউ) দিয়ে শুরু হয় এবং এর নীচে ফুটার থাকে।

এখানে আপনি অ্যান্ড্রয়েড স্টুডিও-প্রকল্প হিসাবে সম্পূর্ণ কাজের উদাহরণটি পেতে পারেন: https://github.com/MackDahlem/AndroidSidemenuFooterExample

বিশেষত নেভিগেশন ড্রয়ারটি এখানে পাওয়া যাবে: https://github.com/MackDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml

স্ক্রীনশট:

কিছু আইটেম অনেক আইটেম


ঠিক কি কাজ করছে না? প্রয়োজনে আমি একটি উদাহরণ প্রকল্প সরবরাহ করতে পারি, যা স্ক্রোলিং ফুটারের সাথে দুর্দান্ত কাজ করে। @ আন্ড্রেবাচেসেগা
অ্যাড্রিমাস

আমি @ আন্ড্রেবাচেগের সাথে একমত হয়েছি, কাজ করছে না, কেবল এনএভি মেনু দেখায় এবং
ফুটারটি

ঠিক আছে, সমস্যা নিয়ে দ্বিতীয়। আমি একটি উদাহরণ প্রকল্প তৈরি করব এবং এটি গিথুবে আপলোড করব। শিগগিরই
এড্রিমাস


উচ্চতা বৈশিষ্ট্যের জন্য বিগ আপভোট। আমি একই পদ্ধতির সাথে যাচ্ছিলাম, তবে নীচের ছায়া থেকে মুক্তি পেতে পারি না। তারপরে, আমি এটি খুঁজে পেয়েছি। ধন্যবাদ!
এলভেদিন সেলিমোস্কি 10:58

23

সহজ উত্তর নীচে ড্রয়ার লেআউট ভিতরে একটি বাটন যোগ করতে পারেন এবং মাধ্যাকর্ষণ এটি সেট হয় navigationview.xml

কোডটি এখানে:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.NavigationView
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/navigation"
   android:layout_width="200dp"
   android:layout_height="match_parent"
   android:layout_gravity="start"
   app:headerLayout="@layout/navigation_header"
   app:menu="@menu/menu_navigation">

     <Button
            android:id="@+id/btn_sing_in"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="@string/sign_in"
            android:layout_gravity="bottom"/>

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

ফলাফল এখানে


2
কয়েকটি মেনু আইটেমের জন্য, এটি কাজ করতে পারে। তবে আপনার অনেকগুলি মেনু আইটেম পাওয়া মাত্রই বাটনটি ছোট ডিভাইসগুলিতে বা ল্যান্ডস্কেপ মোডে মেনু আইটেমগুলির সাথে ওভারল্যাপ হবে।
অ্যাড্রিমাস

1
সত্য তবে এটিকে কাটিয়ে উঠতে আপনি খালি মেনু আইটেম রাখতে পারেন।
মোহাম্মদ ফাদল

বিভিন্ন স্ক্রীন আকারের জন্য খালি মেনু আইটেমগুলির সাথে নীচে বিন্যস্ত করা প্রায় সম্ভব। কিন্তু একটি সাধারণ ভাবে আমি আমার সমাধান বর্ণিত এই কাজ করতে ;-) হয় -> আমার সমাধান দেখতে stackoverflow.com/a/37714353/1075072
Adreamus

17

আপনার একটি ধারক নেভিগেশন ভিউ লেআউট থাকা দরকার এবং তারপরে এতে আরও দুটি নেভিগেশন লেআউট থাকা উচিত। আপনি প্যারেন্ট লেআউটের উপরে এবং নীচে এগুলি সারিবদ্ধ করেন।

আমি পিতামাতার হিসাবে নেভিগেশন ভিউ ব্যবহার করার পরামর্শ দেব এবং ফ্রেমলাউট নয় কারণ এটি মূলত একটি স্ক্রিমফ্রেম লেআউট এবং স্ট্যাটাস বারের সাথে আরও ভালভাবে ইন্টারেক্ট করে।

আপনার ক্রিয়াকলাপটি কেমন হওয়া উচিত তার উদাহরণ এখানে:

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

<!-- Activity content goes here -->

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

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_drawer"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        app:menu="@menu/menu_navigation_drawer" />

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_drawer_bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:menu="@menu/menu_navigation_drawer_bottom" />

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

আপনি এটি সম্পর্কে আরও পড়তে পারেন এবং এখানে একটি উদাহরণ দেখতে পারেন: http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top


1
এটি সত্যিই একটি দুর্দান্ত সমাধান। তবে মোড়ানো সামগ্রীর উপরের এবং নীচে নেভিগেশনভিউ উভয় ক্ষেত্রেই কাজ করছে না। নীচে নেভিগেশনভিউ ব্লক শীর্ষ নেভিগেশনভিউ রোধ করতে আপনাকে কিছু ধ্রুব উচ্চতা দিতে হবে।
ওলকে এরতাş

নিখুঁত সমাধান
Bolein95

@Nitish কীভাবে ওভারল্যাপ এড়ানো যায় যখন "@ + আইডি / নেভিগেশন_ড্রেয়ার" এর প্রতিকৃতি মোডে আরও মান থাকে। এটি নীচে নেভিগেশন দর্শন পিছনে চলে গেছে। আমার ক্ষেত্রে শীর্ষ নেভিউ মেনু আইটেমগুলি গতিশীল পপুলেটে, নীচের নেভিউতে স্থিত মেনু মান রয়েছে has
মোহনরাজ এস

14

আমি এর দেরী উত্তরটি জানি কিন্তু এর নিখুঁত এবং নির্ভুল উত্তর যা বেশিরভাগ বিকাশকারী সন্ধান করছেন।

নেভিগেশন ভিউতে ফুটার যুক্ত করার জন্য, নীচের মতো নেভিগেশন মেনুতে কাস্টম ভিউ যুক্ত করুন:

footer_navigation_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content"
    android:orientation="horizontal">

    <android.support.v7.widget.AppCompatTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="@string/version" />

    <android.support.v7.widget.AppCompatTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:gravity="right" />

</RelativeLayout>

এখন, গ্রুপ অ্যাট্রিবিউট সহ আপনার মেনু এক্সএমএলে উপরে ভিউ যুক্ত করুন o সুতরাং, এটি মেনুতে পাদচরণ হিসাবে পৃথক করতে পারে।

profile_menu.xml

<group android:checkableBehavior="single">

    <item
        android:id="@+id/nav_support"
        android:title="@string/nav_item_support" />

    <item
        android:id="@+id/nav_settings"
        android:title="@string/nav_item_settings" />

    <item
        android:id="@+id/nav_log_out"
        android:title="@string/nav_item_log_out" />
</group>
<group
    android:id="@+id/nav_footer">
    <item
        android:id="@+id/nav_log_version"
        app:actionLayout="@layout/footer_navigation_menu" />
</group>

এটাই. নীচে আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


জটিল নীচের দৃশ্যের ক্ষেত্রে এটি কাজ করবে না কারণ এটি নীচের দৃশ্যে নির্দিষ্ট উচ্চতা দেয়।
আকাশ বিসারিয়ার

এটি কার্যকর হতে পারে তবে পাদলেখের লেআউটের ভিতরে থাকা ভিউগুলিতে ক্লিকলিস্টেনার সেট করার কোনও উপায় নেই ... আমার ক্ষেত্রে আমি ফুটারে সোশ্যাল মিডিয়া বোতামগুলি বহির্মুখী ইউআরএল প্রেরণ করছি, তবে কোনওভাবেই তাদের আইডি ব্যবহার করে মতামতগুলি অর্জন করতে পারিনি আমি ভাবতে পারি ...
রামিরো জিএম

12

এ জাতীয় ধরণের বোমা যে নেভিগেশনভিউতে ফুটার যুক্ত করার বিধান নেই। তবে আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন,

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_base"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbarAlwaysDrawVerticalTrack="true"
            android:scrollbars="vertical"
            android:isScrollContainer="true"
            app:headerLayout="@layout/nav_header_base"
            app:menu="@menu/activity_base_drawer"
            android:layout_gravity="top"
            android:layout_marginBottom="x"
            />

        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view_footer"
            android:layout_width="wrap_content"
            android:layout_height="x"
            app:headerLayout="@layout/hear_layout"
            app:menu="@menu/menu_items"
            android:scrollbars="none"
            android:layout_gravity="bottom"
            />

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

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

যদি আপনার পাদচরণ তালিকা হয়,

    app:headerLayout="@null"
    app:menu="@menu/activity_base_drawer_footer"

তবে, যদি এটি কোনও ধরণের কাস্টম ভিউ হয়,

    app:headerLayout="@layout/my_cutom_footer_view"
    app:menu="@null"

এছাড়াও, এই ক্ষেত্রে, আপনি সেট করতে হবে x = height of your custom footer view

আশা করি এটা সাহায্য করবে.


ধন্যবাদ ভাই. আপনি আমার দিনটি তৈরি করেছেন .. :)
সিদ্ধার্থজি

3
3 নেভিগেশনভিউ? কেন? খারাপ অভিনয়ের জন্য? দয়া করে, এই ভিডিওগুলির কয়েকটি দেখুন: youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
লুই সিএডি

@ লুইসক্যাড যদি আপনার কোনও সমাধান থাকে যা আসলে নেতিবাচক মার্জিন ছাড়াই কাজ করে, দয়া করে এটি আমাদের সাথে ভাগ করুন। আমার এখানে সমস্যাটি উল্লেখ আছে এবং আমি একমাত্র সমাধানটি বিবেচনা করি। হতে পারে নিখুঁত সমাধান নয় এবং এর কিছুটা পারফরম্যান্সের প্রভাব থাকতে পারে ... তবে অন্যান্য বাস্তবায়ন ব্যতিরেকে পারফরম্যান্স সম্পর্কিত বিষয়ে মন্তব্য করবেন না। প্রথমত, অ্যাপ্লিকেশন প্রয়োজনীয়তা বিষয়টি বিবেচনা করে। গুগল যদি আপনার অ্যাপ্লিকেশন প্রয়োজনীয়তার জন্য সমাধান না দেয় ... আপনার কাছে অনেকগুলি বিকল্প নেই।
ড্যাসকলেসকু ভ্লাদুট

10

এখানে চিত্র বর্ণনা লিখুনআমি নিম্নলিখিত পদ্ধতিতে একই জিনিস তৈরি করেছি:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

        <LinearLayout android:layout_gravity="bottom"
            android:background="#20191d1e"
            android:layout_width="match_parent"
            android:paddingBottom="2dp"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="2dp"
            android:orientation="horizontal"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/company_image_id"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_margin="@dimen/margin1dp"
                android:padding="@dimen/margin2dp"
                android:src="@mipmap/ic_launcher_round"
                />

            <TextView
                android:id="@+id/txtCompanyName"
                android:layout_width="match_parent"                              android:layout_marginLeft="@dimen/margin3dp"
                android:layout_height="wrap_content"
                android:textSize="13dp" android:layout_gravity="center"
                android:textStyle="bold"
                android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
        </LinearLayout>
    </android.support.design.widget.NavigationView>

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

এখানে মূল জিনিসটি হ'ল আমি লেআউটটি মাধ্যাকর্ষণটিকে নীচে রেখেছি

LinearLayout android:layout_gravity="bottom"

এই সমাধানের সাথে নীচের দৃশ্যটি মেনু আইটেমগুলিতে ভেসে উঠবে (যদি একাধিক মেনু আইটেম থাকে) ... তবে আমি চাই এটি নীচে স্থির করা উচিত।
আকাশ বিসারিয়ার

7

আপনার পদ্ধতির অনুসরণ করে কিছু ছোটখাটো পরিবর্তন আপনি যা অর্জন করতে চান তা সহায়তা করতে পারে।

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/background_material_light">
    <TextView
       android:id="@+id/footer_item"
       android:layout_width="match_parent"
       android:layout_height="?attr/listPreferredItemHeight"
       android:background="?attr/selectableItemBackground"
       android:gravity="center_vertical"
       android:paddingLeft="?attr/listPreferredItemPaddingLeft"
       android:text="Something"
       android:textAppearance="?attr/textAppearanceListItem" />
</LinearLayout>

এবং মেনুতে কিছু স্টাব আইটেম সেট করুন, যাতে মেনু আইটেমগুলি ওভারল্যাপ না হয়।

<group>
    ...
    <item
        android:title=""
        android:orderInCategory="200"/>
</group>

এছাড়াও আপনি আপনার পাদলেখ আইটেমটিতে একটি ক্লিক শ্রোতা যুক্ত করতে চাইবেন।


আপনার উত্তরের জন্য ধন্যবাদ, এটি আমার পাদলেখ যুক্ত করার জন্য একদম কাজ করেছে, তবে আশা করি আপনার উত্তরটি যদি কেউ আমাকে আরও ভাল করার জন্য আরও ভাল উত্তর না দেয় তবে আমি আপনার উত্তরটি মেনে নেব। +1
এপুল

আপনার বিকল্পগুলি সত্যই খোলা রাখুন। পাদচরণ গুরুত্বপূর্ণ হওয়ায় আরও ভাল উত্তরের প্রত্যাশায়।
razzledazzle

6

স্থির পাদলেখ এবং স্ক্রোল মেনুগুলির সাথে আমার সমাধান (100% পরীক্ষিত)

 <android.support.design.widget.NavigationView
    android:id="@+id/container_navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity=""
    android:nestedScrollingEnabled="true"
    android:scrollIndicators="none">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_above="@+id/navigation2"
            android:layout_gravity="top"
            android:nestedScrollingEnabled="true"
            android:paddingBottom="@dimen/dimen_20_dp"
            app:headerLayout="@layout/nav_header"
            app:itemIconTint="@color/black_800"
            app:itemTextColor="@color/black_800"
            app:menu="@menu/navigation_drawer_items">

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

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:background="@color/white_100"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/empty_spacer"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:drawableTop="@drawable/ic_search"
                    android:gravity="center"
                    android:text="Share" />

                <TextView
                    android:id="@+id/mnuRate"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:drawableTop="@drawable/ic_search"
                    android:gravity="center"
                    android:text="Rate" />

                <TextView
                    android:id="@+id/mnuHelp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:drawableTop="@drawable/ic_search"
                    android:gravity="center"
                    android:text="Help" />
            </LinearLayout>
        </android.support.design.widget.NavigationView>

    </RelativeLayout>

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

6

এইভাবে আমি নেভিগেশনের নীচে লেআউট যুক্ত করতে অর্জন করব:

আপডেট লাইব্রেরি

    <com.google.android.material.navigation.NavigationView
    android:id="@+id/navigation_drawer_container"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start">

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

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

                <com.google.android.material.navigation.NavigationView
                    android:id="@+id/nav_view"
                    android:layout_width="wrap_content"
                    android:layout_height="0dp"
                    android:layout_gravity="top"
                    android:layout_weight="0.8"
                    app:headerLayout="@layout/nav_header_home"
                    app:menu="@menu/activity_home_drawer" />

                <com.google.android.material.navigation.NavigationView
                    android:id="@+id/navigation_drawer_bottom"
                    android:layout_width="wrap_content"
                    android:layout_height="0dp"
                    android:layout_weight="0.2">

                    <LinearLayout
                        android:id="@+id/linearLayout"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_alignParentBottom="true"
                        android:layout_below="@+id/scrollView"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/text_dashboard_followUsAt"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:paddingLeft="16dp"
                            android:paddingStart="16dp"
                            android:text="Follow us at" />

                        <LinearLayout
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:orientation="horizontal"
                            android:paddingLeft="16dp"
                            android:paddingStart="16dp">

                            <ImageView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:padding="5dp"
                                android:src="@drawable/fb" />

                            <ImageView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:padding="5dp"
                                android:src="@drawable/fb" />

                            <ImageView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:padding="5dp"
                                android:src="@drawable/fb" />
                        </LinearLayout>

                        <TextView
                            android:id="@+id/text_dashboard_version"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:layout_marginTop="25dp"
                            android:paddingBottom="5dp"
                            android:paddingEnd="16dp"
                            android:paddingRight="16dp"
                            android:text="Version 1.0" />
                    </LinearLayout>
                </com.google.android.material.navigation.NavigationView>
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</com.google.android.material.navigation.NavigationView>

নেভিগেশন ভিউয়ের নীচে পাদচরণ লেআউট যুক্ত করার জন্য এটি সঠিক সমাধান। যদিও একটি লিনিয়ার-বিন্যাসের প্রয়োজন ছিল না যে আমি এই উত্তরে সম্পাদনা করেছি।
আকাশ বিসারিয়ার

আপনি কীভাবে নেভিগেশন আইটেমটি এই ক্রিয়াকলাপে নির্বাচিত শ্রোতাদের সেট করলেন? @ জোহাইব খালিক
আকাশ বিসারিয়া

5

NavigationViewপ্রথম সন্তানের মধ্যে ListViewউভয় শিরোনাম এবং মেনু আইটেম থাকে।

পাদচরণ যুক্ত করার জন্য কেবলমাত্র প্রয়োজনীয় জিনিসটি তালিকাগুলিতে .addFooterView কল করা উচিত

আরও তথ্য: http://www.andreabaccega.com/blog/2015/08/28/how-to-add-footer-to-navicationview/

পেস্ট কোডটি অনুলিপি করুন:

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ListView listView = (ListView) navigationView.getChildAt(0);
    View toRet = LayoutInflater.from(view.getContext()).inflate(R.layout.drawer_footer, listView, false);

    // Manipulate the view (if you need to) before calling addFooterView.

    listView.addFooterView(toRet, null, false);
  }

10
'com.android.support:design:23.1.0' এ কাজ করে না। এটি নেভিগেশনমেনুপ্রসেন্টার
গর্ডনপ্রোতে

আমি একটি নতুন উত্তর যুক্ত করেছি যা আপনার সমস্যার সমাধান করতে পারে।
লুকাশ

2

আপনার নেভিগেশনভিউয়ের ভিতরে কেবলমাত্র অন্য একটি লেআউট রাখুন:

<android.support.design.widget.NavigationView 
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#000000"
        app:itemTextColor="#FFFFFF"
        app:headerLayout="@layout/fragment_side_menu_header"
        app:menu="@menu/side_menu">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="bottom">
        <TextView
            android:textColor="#FFFFFF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="test" />
        <TextView
            android:textColor="#FFFFFF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="test2" />
    </LinearLayout>
</android.support.design.widget.NavigationView>

কৌশলটি লেআউট_গ্রাভিটি = "নীচে" ব্যবহার করা - এটি আপনার পুরো লেআউটটি নীচে রাখবে এবং পরীক্ষা করবে, টেস্ট 2 সঠিকভাবে সজ্জিত থাকবে।


2

এটা ব্যবহার কর..

<android.support.design.widget.NavigationView
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/nav_header"
    app:itemIconTint="@color/accent"
    app:itemTextColor="@color/primary_text"
    app:menu="@menu/navigation_drawer_items">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@color/grey_200"
        android:orientation="vertical">

        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/divider_height"
            android:background="@color/grey_600"/>

        <com.facebook.share.widget.LikeView
            android:id="@+id/like_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:padding="@dimen/small"/>

        <com.facebook.login.widget.LoginButton
            android:id="@+id/login_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/small"/>
    </LinearLayout>
</android.support.design.widget.NavigationView>

তারপরে নেভিগেশনমেনুভিউতে নীচে প্যাডিং সেট করুন

final View menuView = navigationView.getChildAt(0);
final View bottomView = navigationView.getChildAt(1);
bottomView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            menuView.setPadding(0, 0, 0, bottomView.getMeasuredHeight());
        }
    });

2

এটি চেষ্টা করুন, আমার জন্য এই কাজ।

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

                    <ScrollView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent">

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

                        <android.support.design.widget.NavigationView
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent"
                            android:id="@+id/nav_view"
                            app:headerLayout="@layout/nav_header_admin"
                            app:menu="@menu/activity_admin_drawer"/>

                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:orientation="vertical"
                            android:id="@+id/lyNavFooter">

                           <!--INCLUDE YOUR FOOTER HERE -->

                        </LinearLayout>
                    </LinearLayout>

                    </ScrollView>



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

1

আমি এই ফর্মটি ব্যবহার করি, আমার পক্ষে কাজ করুন। ল্যান্ডস্কেপ এবং প্রতিকৃতিতে।

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

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

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            app:headerLayout="@layout/master_main_header"
            app:itemIconTint="@color/blue"
            app:menu="@menu/menu_drawer">

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

        <Button
            android:id="@+id/master_btn_closession"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:background="@color/blue"
            android:text="Cerrar sesión" />
    </LinearLayout>
</android.support.design.widget.NavigationView>

1

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/activity_main_drawer">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:scrollbars="vertical">

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

            <android.support.design.widget.NavigationView
                android:id="@+id/nav_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:elevation="0dp"
                app:headerLayout="@layout/nav_header_main"
                app:menu="@menu/activity_main_drawer">
                ></android.support.design.widget.NavigationView>

            <LinearLayout
                android:id="@+id/spacer_to_bottom"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:orientation="vertical" />

        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="0dp">

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

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


1
এই উত্তরটি কীভাবে বর্তমান সমস্যা সমাধানে
ওপিকে

2
আমি সমাধান পেয়েছি yআমাদের অবশ্যই ফুটারের জন্য একটি স্থির বিন্যাস অন্তর্ভুক্ত করতে হবে <android.support.design.widget.NavigationView>...</android.support.design.widget.NavigationView>। আরও বিশদের জন্য দয়া করে গিথুব সংগ্রহশালাটি পরীক্ষা করুন ( github.com/mehul0/AndroidSidemenuFooterExample-master )

1

এটি আমার জন্য নেভিগেশন ড্রয়ারের ফুটারে চিত্র স্থাপন করার জন্য কাজ করছে (প্রতিকৃতি এবং ল্যান্ডস্কেপ অভিযোজন)

    <?xml version="1.0" encoding="utf-8"?>
        <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/drawer_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            tools:openDrawer="start">

            <include
                layout="@layout/app_bar_main3"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

            <android.support.design.widget.NavigationView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                android:background="#f00"
                android:fitsSystemWindows="true"
                app:menu="@menu/activity_main3_drawer">

                <android.support.v4.widget.NestedScrollView
                    android:layout_width="match_parent"
                    android:fillViewport="true"
                    android:layout_height="match_parent"
                    android:scrollbars="vertical">

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

                        <android.support.design.widget.NavigationView
                            android:id="@+id/nav_view"
                            app:elevation="0dp"
                            android:layout_height="wrap_content"
                            android:layout_width="match_parent"
                                android:background="#ff0"
                            app:headerLayout="@layout/nav_header_main3"
                            app:menu="@menu/activity_main3_drawer">
                            ></android.support.design.widget.NavigationView>

                        <LinearLayout
                            android:id="@+id/spacer_to_bottom"
                            android:layout_width="match_parent"
                            android:orientation="vertical"
                            android:background="#0f0"
                            android:layout_height="0dp"
                            android:layout_weight="1">
                            <include layout="@layout/nav_footer_main3"></include>
                        </LinearLayout>


                    </LinearLayout>
                </android.support.v4.widget.NestedScrollView>
            </android.support.design.widget.NavigationView>

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

আমার nav_footer_main3 হয়

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="60dp">
        <ImageView
            android:id="@+id/imageView"
            android:layout_gravity="center_horizontal"
            android:layout_width="200dp"
            android:layout_height="50dp"
            android:background="@drawable/logo_1" />
    </LinearLayout>

1

ড্রয়ার মেনুতে স্টিকি হেডার এবং পাদচরণের জন্য বিন্যাস কাঠামো:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout>

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

    <LinearLayout>
        <include layout="@layout/drawer_header"/>
        <android.support.design.widget.NavigationView/>
        <include layout="@layout/drawer_footer"/>
    </LinearLayout>

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

সম্পূর্ণ বিন্যাস:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:elevation="0dp">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay" >
        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:layout_gravity="start"
        android:orientation="vertical">
        <include layout="@layout/drawer_menu_header"/>

        <android.support.design.widget.NavigationView
            android:id="@+id/drawer_menu_body"
            app:elevation="0dp"
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:background="@color/white"
            android:theme="@style/AppTheme.PopupOverlay"
            app:menu="@menu/main_drawer">
        </android.support.design.widget.NavigationView>

        <include layout="@layout/drawer_menu_footer"/>
    </LinearLayout>

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

1

এটি চেষ্টা করুন, আমার জন্য এই কাজ।https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml

তবে, আপনি মসৃণ স্ক্রোলিংয়ের জন্য নেভিগেশনভিউস্ক্রোলিং অক্ষম করতে

private void disableNavigationViewScrolling(NavigationView navigationView) {
    if (navigationView != null) {
        NavigationMenuView navigationMenuView = (NavigationMenuView) navigationView.getChildAt(0);
        if (navigationMenuView != null) {
            navigationMenuView.setNestedScrollingEnabled(false);
        }
    }
}

স্ক্রীনশট:


0

সংস্করণ> 23.xx জন্য স্ক্রোলিং পাদচরণ

অবশেষে আমি যা চেয়েছিলাম তা অর্জন করতে সক্ষম হয়েছি, দুর্ভাগ্যবশত দেখে মনে হচ্ছে যে কেবলমাত্র তালিকাভিউয়ের রেফারেন্সটি ধরে নেওয়া এবং 23.xx এর নীচের সংস্করণগুলিতে শিরোনাম এবং পাদচরণ যোগ করা সম্ভব নয় (আন্ড্রেয়া ব্যাসেগা বর্ণিত)। শিরোলেখের জন্য এটি করা এখনও সম্ভব:

     <android.support.design.widget.NavigationView
     ..
     app:headerLayout="@layout/item_drawer_footer"
     ..
     />

তবে এই মুহূর্তে পাদলেখ যুক্ত করা সম্ভব নয়। যাইহোক, আমি কেবল একটি পাদলেখ যুক্ত করার চেষ্টা করছি এমন ক্ষেত্রে আমি একটি কর্মপরিকল্পনা পেয়েছি: আপনি কেবল দেখুনটিকে বিপরীত করুন, এটি নীচের অংশে শিরোলেখকে যুক্ত করবে যা সাধারণ পাদলেখের মতো আচরণ করে। বিপরীত ক্রমে আপনার মেনুটি তৈরির বিষয়টি নিশ্চিত করুন

    // Grab reference to the embedded recycler view
    RecyclerView mRecyclerView = (RecyclerView) navigationView.getChildAt(0);

    // Create a LinearLayoutManager and set it to reversed
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
    mLayoutManager.setReverseLayout(true);

    // Apply layout manager to the recycler view
    mRecyclerView.setLayoutManager(mLayoutManager);

0

স্থির শিরোলেখ এবং পাদচরণের জন্য আমার ব্যক্তিগত সমাধানটি নেভিগেশনভিউকে নীচের হিসাবে প্রসারিত করছে:

/**
 * Created by guness on 17.01.2018.
 */
class NavigationView : android.support.design.widget.NavigationView {

private var mHeader: View? = null
private var mFooter: View? = null
private var mMenuView: NavigationMenuView? = null

constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    val a = TintTypedArray.obtainStyledAttributes(context, attrs,
            R.styleable.NavigationView, defStyleAttr,
            R.style.Widget_Design_NavigationView)

    if (a.hasValue(R.styleable.NavigationView_footerLayout)) {
        inflateFooterView(a.getResourceId(R.styleable.NavigationView_footerLayout, 0))
    }

    a.recycle()

    (mFooter?.layoutParams as FrameLayout.LayoutParams?)?.gravity = Gravity.BOTTOM
}

init {
    (0 until childCount)
            .map { getChildAt(it) }
            .filter { it is NavigationMenuView }
            .forEach {
                mMenuView = it as NavigationMenuView
                mMenuView!!.overScrollMode = View.OVER_SCROLL_NEVER
            }
}

override fun inflateHeaderView(@LayoutRes res: Int): View {
    mHeader = LayoutInflater.from(context).inflate(res, this, false)
    setHeaderView(mHeader!!)
    return mHeader!!
}

@Deprecated("There can only be one header", ReplaceWith("#setHeaderView(view: View)"))
override fun addHeaderView(view: View) {
    throw IllegalAccessException("Please use #setHeaderView")
}

@UiThread
fun setHeaderView(view: View) {
    removeHeaderView()
    mHeader = view
    addView(mHeader, 0)
}

@Deprecated("No need to use params", ReplaceWith("#removeHeaderView()"))
override fun removeHeaderView(view: View) {
    removeHeaderView()
}

@UiThread
fun removeHeaderView() {
    if (mHeader != null) {
        removeView(mHeader)
        mHeader = null
    }
}

@Deprecated("No need to count, it is either 1 or zero", ReplaceWith("#hasHeader()"))
override fun getHeaderCount(): Int {
    return if (mHeader == null) 0 else 1
}

@Deprecated("No need to use params", ReplaceWith("#getHeaderView()"))
override fun getHeaderView(index: Int): View? {
    return getHeaderView()
}

fun getHeaderView(): View? {
    return mHeader
}

fun hasHeader(): Boolean {
    return mHeader != null
}

fun inflateFooterView(@LayoutRes res: Int): View {
    mFooter = LayoutInflater.from(context).inflate(res, this, false)
    setFooterView(mFooter!!)
    return mFooter!!
}

@UiThread
fun setFooterView(view: View) {
    removeFooterView()
    mFooter = view
    addView(mFooter, 0)
}

@UiThread
fun removeFooterView() {
    if (mFooter != null) {
        removeView(mFooter)
        mFooter = null
    }
}

fun hasFooter(): Boolean {
    return mFooter != null
}

fun getFooterView(): View? {
    return mFooter
}

fun setOnClickListener(@IdRes res: Int, listener: View.OnClickListener) {
    mHeader?.findViewById<View>(res)?.setOnClickListener(listener)
    mFooter?.findViewById<View>(res)?.setOnClickListener(listener)
}

override fun onMeasure(widthSpec: Int, heightSpec: Int) {
    super.onMeasure(widthSpec, heightSpec)
    val headerHeight = mHeader?.measuredHeight ?: 0
    val footerHeight = mFooter?.measuredHeight ?: 0
    val params = (mMenuView?.layoutParams as ViewGroup.MarginLayoutParams?)
    var changed = false
    if (params?.topMargin != headerHeight) {
        params?.topMargin = headerHeight
        changed = true
    }
    if (params?.bottomMargin != footerHeight) {
        params?.bottomMargin = footerHeight
        changed = true
    }
    if (changed) {
        mMenuView!!.measure(widthSpec, heightSpec)
    }
}
}

মূলত নেভিগেশনভিউ পুনর্ব্যবহারযোগ্য ভিউতে প্রথম আইটেম হিসাবে লিনিয়ারলআউট তৈরি করে এবং সমস্ত সামগ্রী একসাথে স্ক্রোল করে। ফুটার এবং শিরোলেখের জন্য পৃথক ভিউ তৈরি করা এবং তারপরে গ্র্যাভিটি ব্যবহার করে এগুলিকে উপরের এবং নীচে ঠেলাঠেলি করাতে এই সম্পর্কে ধারণা। পরে রিসাইক্লিউউয়ের জন্য সামগ্রী পরিমাপ করার পরে স্ক্রোলিং সামগ্রী স্থির করে।

এখানে আমার লেখা লিখিত লাইব্রেরিতে উপরে কোড রয়েছে। https://github.com/guness/NavigationView

এর ভাল দিক, এখন আমি স্থানীয় নেভিগেশন শিরোনামের মতো এক্সএমএলে ফুটার ভিউ সংজ্ঞায়িত করতে পারি:

    app:footerLayout="@layout/nav_footer_main"
    app:headerLayout="@layout/nav_header_main"

0

এখানে এমন একটি সমাধান রয়েছে যাতে বাসা বাঁধার প্রয়োজন হয় না এবং যা ফুটার ভিউর নিজস্ব উচ্চতার উপর ভিত্তি করে অভ্যন্তরীণ নেভিগেশন মেনুভিউয়ের নীচের প্যাডিংকে গতিশীলভাবে সামঞ্জস্য করে, যার অর্থ পাদলেখের উচ্চতা সেট করা যেতে পারে wrap_contentএবং আপনি ফুটারের দৃশ্যমানতা পরিবর্তন করতে VISIBLEবা এটিকে পরিবর্তন করতে পারেন GONE

public class NavigationMenuFooterView extends LinearLayout {

    public NavigationMenuFooterView(Context context) {
        super(context);
    }

    public NavigationMenuFooterView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public NavigationMenuFooterView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onVisibilityChanged(@NonNull View changedView, int visibility) {
        update(getHeight());
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        update(h);
    }

    private void update(int height) {

        ViewParent parent = getParent();
        if (parent instanceof ViewGroup) {
            View navigationMenuView = ((ViewGroup) parent).findViewById(R.id.design_navigation_view);
            if (navigationMenuView != null) {
                if (getVisibility() == View.GONE) {
                    height = 0;
                }
                navigationMenuView.setPadding(navigationMenuView.getPaddingLeft(),
                        navigationMenuView.getPaddingTop(), navigationMenuView.getPaddingRight(), height);
            }
        }
    }
}

আপনার আইডিএসএক্সএমএলে আপনাকে নকশা_নবীকরণ_ভিউয়ের আইডি নির্ধারণ করতে হবে:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item name="design_navigation_view" type="id"/>
    </resources>

এবং এটির মতো ব্যবহার করুন:

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/drawer_header"
        app:itemBackground="@drawable/drawer_item"
        app:itemIconTint="@color/drawer_item"
        app:itemTextColor="@color/drawer_item"
        app:menu="@menu/menu_drawer">

        <util.NavigationMenuFooterView
            android:id="@+id/navigation_footer_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="#fff"
            android:orientation="vertical">

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="#ddd" />

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

        </util.NavigationMenuFooterView>

    </com.google.android.material.navigation.NavigationView>

দিয়ে পরীক্ষিত com.google.android.material:material:1.0.0


0

আপনি যদি তালিকা ভিউ ব্যবহার করছেন তবে আপনি এইভাবে চেষ্টা করতে পারেন। তালিকার ভিউ সমর্থন ফুটার ভিউ ফাংশন যোগ করে, যাতে আপনি নীচের কোড হিসাবে তালিকা ভিউ ব্যবহার করে একটি কাস্টম পাদচরণ যুক্ত করতে পারেন R.layout.drawer_footer View

View footerView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.drawer_footer, expandableListView, false);
TextView footer = footerView.findViewById(R.id.id_footer_wta_version_information);
expandableListView.addFooterView(footerView);

আমার ক্ষেত্রে, আমি তালিকাটির পরিবর্তে প্রসারণযোগ্যলিস্টভিউ ব্যবহার করি (তালিকাতেও অ্যাডফুটার ফাংশন রয়েছে)। আশা করি এইভাবে আপনাকে সহায়তা করবে


-1

এই লাইনগুলি আপনার মেনু বিন্যাসে রাখুন। আমি আশা করি এটি আপনার সমস্যার সমাধান করবে:

    <group
        android:id="@+id/grp11"
        android:checkableBehavior="single">

        <item


            android:title="" />
        <item


            android:title="" />
        <item

            android:title="" />
        <item


            android:title="" />
        <item


            android:title="" />
        <item

            android:title="" />

    </group>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.