Google memperkenalkan NavigationView
di Perpustakaan Dukungan Desain versi 22.2.0 yang dengannya Anda dapat membuat laci dengan sangat mudah menggunakan sumber daya menu.
Bagaimana saya bisa membuat garis pembagi sederhana antara dua item? Mengelompokkan item tidak berfungsi. Membuat bagian sub item memang membuat garis pembagi, tetapi membutuhkan judul, yang tidak saya inginkan.
Bantuan apa pun akan dihargai.
android
navigation-drawer
android-support-library
android-design-library
navigationview
Longi
sumber
sumber
Jawaban:
Yang perlu Anda lakukan adalah mendefinisikan
group
dengan ID unik , saya telah memeriksa implementasinya jika grup memiliki id berbeda, itu akan membuat pembagi.Menu contoh, membuat pemisah:
sumber
setChecked
tampaknya bekerja di tingkat kelompok. Jika Anda memilih item di Grup A, lalu buka laci lagi dan pilih item di Grup B, kedua item akan tetap disorot. Mungkin Google akan memperbaiki perilaku ini di rilis berikutnya, tetapi untuk saat ini, itulah kerugian menggunakan beberapa grup dengan NavigationView.android:checkableBehavior="none"
untuk grup kedua Anda (yang merupakan tindakan, bukan navigasi, saya kira)group
itu akan mengkompilasi dan menjalankan tetapi pembagi disembunyikan.buat drawer_item_bg.xml yang bisa digambar seperti ini,
dan menambahkannya ke NavigationView sebagai aplikasi: itemBackground = "@ drawable / drawer_item_bg"
dan di sini kita pergi ...
sumber
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
untuk perbatasan item sempurnaSederhana tambahkan DeviderItemDecoration:
Ini terlihat seperti ini:
sumber
addItemDecoration
baris ke 1px?Anda dapat menambahkan pembagi dengan mudah dengan mengatur Latar Belakang Item Menu melalui XML menggunakan
app:itemBackground
Dan gunakan LayerDrawable sebagai latar belakang. Ini melindungi overlay desain material untuk klik.
Hasil:
sumber
Saya pikir saya punya solusi yang lebih baik untuk masalah beberapa item yang diperiksa. Dengan menggunakan cara saya, Anda tidak perlu khawatir tentang mengubah kode Anda saat menambahkan bagian baru ke menu Anda. Menu saya terlihat seperti solusi yang diterima yang ditulis oleh Jared, dengan perbedaan menggunakan andoid: checkableBehavior = " all " pada grup:
Perilaku checkable 'all' memungkinkan untuk memeriksa / menghapus centang item tunggal sesuka hati, terlepas dari grup mana mereka berasal. Anda hanya perlu menyimpan menuit yang terakhir diperiksa. Kode java terlihat seperti ini:
sumber
Membuat grup yang berbeda seperti jawaban Nilesh memang membuat pembagi di antara Tapi menciptakan masalah dua item yang diperiksa di laci nav.
Cara sederhana bagaimana saya menangani ini adalah:
sumber
android:checkableBehavior="none"
Saya tidak yakin apakah ini sudah diperbaiki
API 26 (Android 8)
atau mungkin sepanjang waktu. Saya masih noob dalam pemrograman Android. Namun saya menambahkan grup induk seperti di bawah ini. Menguji pada ponsel Android 6 fisik,nav_g1
ataunav_g2
akan membatalkan pilihan item lainnya.Java
kode apa pun ke pendengarKode Menu
Catatan
android:checkableBehavior="single"
untuk kelompok orang tua diperlukan sehingga masalah beberapa item menu yang dipilih dalam ini jawaban (disebutkan dalam komentar dengan hungryghost) tidak terjadiDan inilah screenshotnya
sumber
Saya ingin pembagi di atas item pertama dan setelah item terakhir. Menggunakan solusi @Nilesh saya harus menambahkan item menu dummy dan mengatur diaktifkan ke false yang terasa sangat kotor. Plus bagaimana jika saya ingin melakukan hal-hal keren lainnya di menu saya?
Saya perhatikan NavigationView memperluas FrameLayout sehingga Anda dapat memasukkan konten Anda sendiri seperti yang Anda lakukan untuk FrameLayout. Saya kemudian mengatur menu kosong xml sehingga hanya menampilkan tata letak khusus saya. Saya mengerti bahwa ini mungkin bertentangan dengan jalur yang Google inginkan untuk kami ambil, tetapi jika Anda menginginkan menu yang benar-benar khusus, ini adalah cara mudah untuk melakukannya.
Inilah gayanya
Dan mudah digambar
Dan menunya
edit:
Alih-alih Tombol Anda dapat menggunakan TextView dengan drawable yang meniru item menu asli terlihat:
sumber
Penghargaan harus diberikan kepada Zorawar untuk solusinya, Maaf karena menduplikasi jawabannya tetapi tidak dapat menambahkan begitu banyak teks yang diformat dalam komentar.
Solusi Zorawar berfungsi, kode dapat diperbaiki seperti:
sumber
Jawaban Nileh benar, Kecuali ia memiliki satu kekurangan pengecekan ganda.
Jadi menggunakan
dengan id unik akan menyelesaikan masalah
sumber
Jika Anda ingin menambahkan pembagi secara dinamis , Anda bisa menambahkan SubMenu kosong seperti ini:
ini akan menambah pembagi.
pastikan untuk lulus dalam indeks yang tepat saat menggunakan
menu.getItem(int index)
sumber
Selain jawaban sebelumnya jika Anda menginginkan pemisah dekoratif tetapi tidak ingin membuat beberapa grup karena masalah "perilaku yang dapat diperiksa" - Anda dapat menetapkan id grup yang sama untuk semua grup Anda.
Contoh:
sumber
Jika jawaban yang dipilih tidak berfungsi untuk Anda, Anda mungkin ingin mencoba menambahkan ini
onCreateOptionsMenu
sebagai tambahan untuk memberikan id grup unik:sumber