Bagaimana cara mengatur pengaturan footer dan item profil NavitationView
? agar terlihat seperti laci navigasi Inbox by email. The NavitationView
item yang digelembungkan oleh sumber daya menu, tapi saya tidak tahu cara mengatur item bawah untuk sumber daya menu, atau bagaimana saya bisa mengatur tampilan kustom untuk NavigationView
atau bawah offset? Saya telah mencoba menempatkan ini <LinearLayout...>
sebagai tampilan footer, tetapi pada layar kecil footer meletakkan item dan saya tidak dapat menggulir menu, saya telah mencoba memasang bantalan footer NavigationView
, tetapi footer mengambil bantalan juga.
Ini tidak bergulir di layar kecil:
<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>
Ini menggulung, tetapi footer berada di atas item menu:
<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
File menu laci :
<?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
menuItem.setIcon(Drawable)
.Jawaban:
Jika Anda menginginkan footer tetap (non-scrolling) di menu navigasi, Anda perlu membungkus NavigationView di sekitar tata letak lain, seperti yang Anda posting. NavigationView bekerja seperti FrameLayout, jadi ini akhirnya "menumpuk" tata letak bagian dalam di atas item menu NavigationView. Berikut salah satu cara untuk mengaturnya, menggunakan LinearLayout untuk item footer:
Footer Tetap
Saya menggunakan TextView dalam contoh ini, tetapi Anda dapat menggunakan apa pun yang Anda inginkan untuk tampilan footer. Untuk menghindari item footer tumpang tindih dengan bagian bawah menu, tambahkan beberapa item dummy ke akhir file sumber daya menu Anda (ini akan bertindak seperti "spacer"):
res / menu / drawer.xml
Terakhir, jangan lupa untuk menambahkan listener klik di Aktivitas Anda untuk tampilan footer yang sebenarnya:
Scrolling Footer
Jika Anda mengizinkan footer untuk menggulir dengan NavigationView lainnya, itu membuat segalanya lebih sederhana (tidak ada tata letak tambahan atau pendengar klik). Cukup tambahkan item footer ke file sumber menu Anda sebagai yang unik
<group>
(ini akan membuat garis pemisah ), dan semuanya akan ditangani secara otomatis dan gulir bersama:res / menu / drawer.xml
sumber
<group>
jika Anda menginginkan garis pemisah, jika tidak, footer navigasi aplikasi Gmail hanya terlihat seperti item menu normal (setidaknya bagi saya).<dimen name="design_navigation_padding_bottom" tools:override="true">48dp</dimen>
dalamdimen.xml
alih-alih menggunakan item dummy dalam menu! itu sempurna !Saya hanya akan memberi Anda petunjuk cara mengatasinya, tetapi saya tidak memiliki kesempatan untuk mengujinya di NavigationView, dan saya cukup yakin ini akan berhasil.
di sini contoh tata letak xml;
inilah hasilnya:
Caranya adalah dengan mengaplikasikan padding pada parent dan minus margin pada child.
Coba cepat:
sumber
Mengikuti pendekatan yang dijelaskan dalam jawaban lain dari tampilan navigasi bersarang, beberapa masalah muncul:
Solusi saya untuk semua masalah ini adalah sebagai berikut:
Di sini, NestedScrollView bertindak sebagai induk pengguliran untuk sub-NavigationView. Artinya, sub-NavigationView tidak pernah menampilkan scrollbar itu sendiri, tetapi seluruh konten ditampilkan dengan cara datar.
Tata letak 'spacer_to_bottom' mengisi semua ruang yang tersisa, sehingga dengan beberapa ikon menu, footer masih berada di bawah.
Terakhir, footer tetap ditambahkan ke linear layout, yang dimulai dengan menu nyata (sub-NavigationView), spacer, dan di bagian bawah footer.
Di sini Anda dapat menemukan contoh kerja lengkap sebagai AndroidStudio-Project: https://github.com/MarcDahlem/AndroidSidemenuFooterExample
Terutama laci navigasi dapat ditemukan di sini: https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Tangkapan layar:
sumber
Jawaban paling sederhana adalah menambahkan tombol di dalam layout Drawer dan mengatur gravitasi ke bawah di
navigationview.xml
.Ini kodenya:
sumber
Anda harus memiliki tata letak tampilan navigasi kontainer dan kemudian itu harus berisi dua tata letak navigasi lagi. Anda menyelaraskannya ke atas dan bawah tata letak induk.
Saya akan merekomendasikan menggunakan tampilan navigasi sebagai induk dan bukan FrameLayout karena pada dasarnya ini adalah ScrimFrameLayout dan berinteraksi dengan bilah status dengan lebih baik.
Berikut adalah contoh tampilan aktivitas Anda:
Anda dapat membaca lebih lanjut tentang itu dan melihat contohnya di sini: http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top
sumber
Saya tahu jawabannya yang terlambat tetapi jawaban yang sempurna dan akurat yang dicari sebagian besar pengembang.
Untuk menambahkan footer dalam tampilan navigasi, Tambahkan tampilan kustom ke menu navigasi seperti di bawah ini:
footer_navigation_menu.xml
Sekarang tambahkan tampilan di atas ke dalam menu xml Anda dengan atribut group, sehingga dapat dibedakan sebagai footer pada menu.
profile_menu.xml
Itu dia. Di bawah ini adalah keluarannya:
sumber
Agak mengecewakan bahwa NavigationView tidak memiliki ketentuan untuk menambahkan footer. Tapi Anda bisa mencoba sesuatu seperti ini,
Jika footer Anda berupa daftar,
Tapi, jika itu semacam tampilan ubahsuaian,
Juga, dalam hal ini, Anda perlu mengatur
x = height of your custom footer view
Semoga membantu.
sumber
Saya membuat hal yang sama dengan cara berikut:
Di sini hal utama adalah bahwa saya meletakkan tata letak gravitasi ke bawah misalnya
sumber
Mengikuti pendekatan Anda, beberapa perubahan kecil dapat membantu apa yang ingin Anda capai.
Dan atur beberapa item stub di menu, sehingga item menu tidak tumpang tindih.
Anda juga ingin menambahkan listener klik ke item footer Anda.
sumber
Solusi saya dengan footer tetap dan menu gulir (100% diuji)
sumber
Ini adalah bagaimana saya mencapai untuk menambahkan tata letak di bagian bawah navigasi:
Perpustakaan diperbarui
sumber
NavigationView
anak pertamaListView
berisi item menu dan header.Satu-satunya hal yang diperlukan untuk menambahkan footer adalah memanggil .addFooterView ke ListView
Info lebih lanjut: http://www.andreabaccega.com/blog/2015/08/28/how-to-add-footer-to-navigationview/
Salin kode tempel:
sumber
Letakkan saja tata letak lain di dalam NavigationView Anda:
Triknya adalah menggunakan layout_gravity = "bottom" - ini akan menempatkan seluruh tata letak Anda di bagian bawah dan menguji, test2 ditumpuk dengan benar.
sumber
Gunakan ini..
lalu setel padding bawah ke NavigationMenuView
sumber
Coba ini, ini pekerjaan untuk saya.
sumber
Saya menggunakan formulir ini, bekerja untuk saya. dalam lanskap & potret.
sumber
sumber
<android.support.design.widget.NavigationView>...</android.support.design.widget.NavigationView>
. untuk detail lebih lanjut, silakan periksa repositori github ( github.com/mehul0/AndroidSidemenuFooterExample-master )sumber
Struktur tata letak untuk header dan footer lengket di menu laci:
Tata letak lengkap:
sumber
Coba ini, ini pekerjaan untuk saya.https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Namun, Anda menonaktifkan NavigationViewScrolling untuk pengguliran yang lebih lancar
Tangkapan layar:
sumber
Gulir footer untuk Versi> 23.xx
Saya akhirnya berhasil mencapai apa yang saya inginkan, sayangnya sepertinya tidak mungkin lagi untuk hanya mengambil referensi ke ListView dan menambahkan header dan footer seperti pada versi di bawah 23.xx (seperti dijelaskan oleh Andrea Baccega). Melakukan ini untuk tajuk masih memungkinkan:
Tetapi menambahkan footer tidak memungkinkan untuk saat ini. Namun, saya menemukan solusi jika Anda hanya mencoba menambahkan footer: Anda hanya membalik tampilan, ini akan menambahkan header ke bawah yang berperilaku seperti footer normal. Pastikan untuk membuat menu Anda dalam urutan terbalik
sumber
Solusi pribadi saya untuk header dan footer tetap adalah memperluas NavigationView sebagai berikut:
Awalnya, NavigationView membuat LinearLayout sebagai item pertama di RecyclerView dan menggulir semua konten menjadi satu. Idenya adalah untuk membuat Views terpisah untuk footer dan header, lalu mendorongnya ke atas dan bawah menggunakan Gravity. Nanti saat mengukur konten untuk RecyclerView mengatur konten yang bergulir.
Berikut adalah pustaka yang berisi kode di atas yang saya tulis. https://github.com/guness/NavigationView
Sisi baiknya, sekarang saya dapat mendefinisikan tampilan footer di xml seperti header di native:
sumber
Berikut adalah solusi yang tidak memerlukan penumpukan dan yang secara dinamis menyesuaikan padding bawah dari NavigationMenuView internal berdasarkan tinggi tampilan footer itu sendiri, yang berarti tinggi footer dapat disetel ke
wrap_content
dan Anda dapat secara dinamis mengubah visibilitas footer menjadiVISIBLE
atauGONE
.Anda perlu menentukan id design_navigation_view di ids.xml Anda:
Dan gunakan seperti ini:
Diuji dengan
com.google.android.material:material:1.0.0
.sumber
Jika Anda menggunakan listview, Anda dapat mencoba cara ini. Dukungan tampilan daftar menambahkan fungsi tampilan footer, sehingga Anda dapat menambahkan tampilan footer R.layout.drawer_footer kustom menggunakan objek listview seperti kode di bawah ini
Dalam kasus saya, saya menggunakan expandableListView daripada listview (listview juga memiliki fungsi addFooter). Semoga cara ini membantu Anda
sumber
Masukkan baris-baris ini ke dalam tata letak menu Anda. Saya harap ini akan memperbaiki masalah Anda:
sumber