Ini adalah contoh bagaimana itu bisa dilakukan sebelumnya di ListView
kelas, menggunakan parameter divider dan dividerHeight :
<ListView
android:id="@+id/activity_home_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dp"/>
Namun, saya tidak melihat kemungkinan seperti itu di RecyclerView
kelas.
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_home_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
Dalam hal itu, apakah boleh mendefinisikan margin dan / atau menambahkan tampilan pembagi kustom langsung ke tata letak item daftar atau apakah ada cara yang lebih baik untuk mencapai tujuan saya?
android
android-recyclerview
divider
EyesClear
sumber
sumber
com.homeretailgroup.argos.android.view.decorators.DividerItemDecoration
dan menggunakannya seperti itu:mRecyclerView.addItemDecoration(new DividerItemDecoration(activity, LinearLayoutManager.VERTICAL));
Jawaban:
Pembaruan Oktober 2016
Versi 25.0.0 dari Perpustakaan Dukungan Android memperkenalkan
DividerItemDecoration
kelas:Pemakaian:
Jawaban sebelumnya
Beberapa jawaban baik menggunakan metode yang sudah usang, atau tidak memberikan solusi lengkap, jadi saya mencoba untuk melakukan singkat, up-to-date.
Tidak seperti
ListView
,RecyclerView
kelas tidak memiliki parameter terkait pembagi. Sebaliknya, Anda perlu memperluasItemDecoration
,RecyclerView
kelas batin seorang:Vertical
jarakItemDecoration
Perpanjang
ItemDecoration
, tambahkan konstruktor khusus yang menggunakan spasiheight
sebagai parameter dangetItemOffsets()
metode override :Jika Anda tidak ingin memasukkan ruang di bawah item terakhir, tambahkan kondisi berikut:
Catatan: Anda juga dapat memodifikasi
outRect.top
,outRect.left
danoutRect.right
properti untuk efek yang diinginkan.Pembagi
ItemDecoration
Perluas
ItemDecoration
dan timpaonDraw()
metode:Anda dapat memanggil konstruktor pertama yang menggunakan atribut pembagi Android default, atau yang kedua yang menggunakan drawable Anda sendiri, misalnya drawable / divider.xml
Catatan: jika Anda ingin pembagi digambar di atas item Anda,
onDrawOver()
ganti metode.Pemakaian
Untuk menggunakan kelas baru Anda tambahkan
VerticalSpaceItemDecoration
atauDividerSpaceItemDecoration
keRecyclerView
, misalnya dalamonCreateView()
metode fragmen Anda :Ada juga perpustakaan Lucas Rocha yang seharusnya menyederhanakan proses dekorasi item. Belum mencobanya.
Di antara fitur - fiturnya adalah:
sumber
onDraw()
. Saya hanya merujuk contoh yang sudah ada.canvas.drawLine(startX, startY, stopX, stopY, mPaint)
dionDrawOver
? Adakah perbedaan kinerja?Cukup tambahkan
Anda juga mungkin perlu menambahkan ketergantungan
compile 'com.android.support:recyclerview-v7:27.1.0'
EDIT:
Untuk sedikit mengubahnya, Anda dapat menambahkan drawable yang dapat disesuaikan:
Anda bebas menggunakan drawable kustom apa pun, misalnya:
sumber
Configuration
pembagi vertikal:if (orientation == Configuration.ORIENTATION_LANDSCAPE) { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL)); } else { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));}
Mungkin saya mengarahkan perhatian Anda ke file khusus ini di Github oleh Alex Fu: https://gist.github.com/alexfu/0f464fc3742f134ccd1e
Ini contoh file DividerItemDecoration.java "ditarik langsung dari demo dukungan". ( Https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS )
Saya bisa mendapatkan garis pembagi dengan baik setelah mengimpor file ini di proyek saya dan menambahkannya sebagai hiasan item ke tampilan pendaur ulang.
Begini tampilan onCreateView saya di dalam fragmen yang berisi Recyclerview:
Saya yakin gaya tambahan dapat dilakukan, tetapi ini adalah titik awal. :)
sumber
ItemDecoration
Implementasi sederhana untuk ruang yang sama antara semua item.sumber
getChildPosition
sekarang sudah ditinggalkan,getChildAdapterPosition
bisa digunakan sebagai gantinya.super.getItemOffsets
, atau offset Anda akan ditimpa.getChildLayoutPosition
digunakan?Yang sederhana adalah mengatur warna latar belakang untuk RecyclerView dan warna latar belakang yang berbeda untuk item. Berikut ini sebuah contoh ...
dan item TextView (bisa berupa apa saja) dengan margin bawah "x" dp atau px.
Hasil ...
sumber
Saya pikir menggunakan pembagi sederhana akan membantu Anda
Untuk menambahkan pembagi untuk setiap item:
1- Tambahkan ini ke direktori line_divider.xml yang dapat ditarik
2- Membuat kelas SimpleDividerItemDecoration
Saya menggunakan contoh ini untuk mendefinisikan kelas ini:
https://gist.github.com/polbins/e37206fbc444207c0e92
3- Dalam aktivitas atau fragmen yang menggunakan RecyclerView, di dalam onCreateView tambahkan ini:
4- Untuk menambahkan jarak antar Item
Anda hanya perlu menambahkan properti padding ke tampilan item Anda
sumber
Seperti yang telah saya atur
ItemAnimators
. ItuItemDecorator
tidak masuk atau keluar bersama dengan animasi.Saya akhirnya memiliki baris tampilan di file tata letak tampilan item saya masing-masing item. Ini menyelesaikan kasus saya.
DividerItemDecoration
merasa terlalu banyak sihir untuk pembagi sederhana.sumber
Ini sederhana, Anda tidak perlu kode yang rumit
Tambahkan ini di drawable Anda: line_divider.xml
sumber
Karena tidak ada cara yang tepat untuk mengimplementasikan ini dengan benar menggunakan Material Design, saya hanya melakukan trik berikut untuk menambahkan pembagi pada item daftar secara langsung:
sumber
Cara saya menangani tampilan Divider dan Insets Divider adalah dengan menambahkan ekstensi RecyclerView.
1.
Tambahkan file ekstensi baru dengan memberi nama View atau RecyclerView:
dan tambahkan
setDivider
metode ekstensi di dalam file RecyclerViewExtension.kt.2.
Buat file sumber daya Drawable di dalam
drawable
paket sepertirecycler_view_divider.xml
:di mana Anda dapat menentukan margin kiri dan kanan pada
android:insetLeft
danandroid:insetRight
.3.
Pada Aktivitas atau Fragmen tempat RecyclerView diinisialisasi, Anda dapat mengatur kustom yang dapat digambar dengan menelepon:
4.
Ceria 🍺
sumber
Jika ada yang mencari untuk hanya menambahkan, katakanlah, jarak 10dp antara item, Anda dapat melakukannya dengan mengatur drawable ke
DividerItemDecoration
:Dimana
divider_10dp
sumber daya yang dapat digambar berisi:sumber
UPDATE OKTOBER 2016
Dengan dukungan perpustakaan v25.0.0 akhirnya ada implementasi standar pembagi dasar horisontal dan vertikal tersedia!
https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html
sumber
Ini sebenarnya tidak menyelesaikan masalah, tetapi sebagai solusi sementara, Anda dapat mengatur properti useCompatPadding pada kartu di tata letak XML Anda untuk membuatnya mengukur sama seperti pada versi pra-Lollipop.
sumber
Bagi mereka yang mencari hanya ruang antar item dalam
RecyclerView
lihat pendekatan saya di mana Anda mendapatkan ruang yang sama antara semua item, kecuali dalam item pertama dan terakhir di mana saya memberikan bantalan yang lebih besar. Saya hanya menerapkan bantalan ke kiri / kanan secara horizontalLayoutManager
dan ke atas / bawah secara vertikalLayoutManager
.dimens.xml
sumber
Tambahkan margin ke tampilan Anda, itu berhasil untuk saya.
Jika Anda hanya ingin menambahkan spasi yang sama dan ingin melakukannya dalam XML , tetapkan jumlah
padding
AndaRecyclerView
dan jumlah yang samalayoutMargin
untuk item yang Anda kembangkan ke dalamRecyclerView
, dan biarkan warna latar belakang menentukan warna spasi.sumber
overscroll
efek ketika menarik di akhir daftar akan memiliki padding yang tidak perlu diterapkan ketika padding diterapkan keRecyclerView
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" card_view:cardElevation="4dp" <!-- your item's XML here --> </android.support.v7.widget.CardView>
Cukup tambahkan latar belakang ke tata letak item pendaur ulang Anda sebagai berikut
Buat shape_border.xml berikut dalam folder yang dapat digambar
Ini adalah hasil akhir - sebuah RecyclerView dengan pembagi.
sumber
parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1
mungkinparent.getChildAdapterPosition(view) > 0
denganoutRect.bottom = mVerticalSpaceHeight
menjadioutRect.top = mVerticalSpaceHeight
itu harus menjadi jawaban yang diterima.Saya bercabang DividerItemDecoration dari intis lama dan menyederhanakannya agar sesuai dengan kasus penggunaan saya, dan saya juga memodifikasinya untuk menggambar pembagi cara mereka digambar di ListView, termasuk pembagi setelah item daftar terakhir. Ini juga akan menangani animasi ItemAnimator vertikal:
1) Tambahkan kelas ini ke proyek Anda:
2) Tambahkan dekorator ke RecylerView Anda:
sumber
Alih-alih membuat
shape xml
untuk mengubah tinggi dan warna pembagi. Anda dapat membuat seperti pemrogramansumber
Diambil dari pencarian google, tambahkan ItemDecoration ini ke
RecyclerView
:sumber
Tautan ini berfungsi seperti pesona bagi saya:
https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36
Kemudian dalam aktivitas Anda:
Atau ini jika Anda menggunakan sebuah fragmen:
sumber
mShowFirstDivider = false
,mShowLastDivider = true
, tapi itu tidak akan berhasil. Ada yang tahu kenapa?Kami dapat mendekorasi item menggunakan berbagai dekorator yang terpasang pada recyclerview seperti DividerItemDecoration:
Cukup gunakan berikut ini ... diambil dari jawaban oleh EyesClear
} dan kemudian gunakan yang di atas sebagai berikut
Ini akan menampilkan pembagi antara setiap item dalam daftar seperti yang ditunjukkan di bawah ini:
Dan bagi mereka yang mencari rincian lebih lanjut dapat melihat panduan ini Menggunakan RecyclerView _ CodePath Android Cliffnotes
Beberapa jawaban di sini menyarankan penggunaan margin tetapi tangkapannya adalah: Jika Anda menambahkan margin atas dan bawah, keduanya akan muncul ditambahkan di antara item dan mereka akan terlalu besar. Jika Anda hanya menambahkan, maka tidak akan ada margin di bagian atas atau bawah dari seluruh daftar. Jika Anda menambahkan setengah jarak di bagian atas, setengah di bagian bawah, margin luar akan terlalu kecil.
Dengan demikian, satu-satunya solusi estetika yang benar adalah pembagi bahwa sistem tahu di mana harus diterapkan dengan benar: antara item tetapi tidak di atas atau di bawah item.
Tolong beri tahu saya jika ada keraguan dalam komentar di bawah ini :)
sumber
DividerItemDecoration
seperti apa kode itu.Terlambat tetapi untuk
GridLayoutManager
saya gunakan ini:Ini berfungsi untuk semua rentang rentang yang Anda miliki.
Ollie.
sumber
FlexboxLayoutManager
?Anda dapat menambahkan dengan mudah secara terprogram.
Jika Layout Manager Anda adalah Linearlayout maka Anda dapat menggunakan:
sumber
sumber
Saya merasa ada kebutuhan untuk jawaban sederhana berbasis kode yang tidak menggunakan XML
sumber
Jika Anda ingin menambahkan ruang yang sama untuk item, cara paling sederhana adalah menambahkan padding atas + kiri untuk RecycleView dan margin kanan + bawah ke item kartu.
dimens.xml
list_item.xml
list.xml
sumber
Saya telah menambahkan item baris dalam daftar seperti di bawah ini
1px akan menarik garis tipis.
sumber
Ini
RecyclerView
sedikit berbeda dariListView
. Sebenarnya,RecyclerView
kebutuhanListView
struktur seperti di dalamnya. Sebagai contoh, aLinearLayout
. TheLinearLayout
memiliki parameter untuk membagi setiap elemen. Dalam kode di bawah ini saya memiliki objek yangRecyclerView
terdiri dariCardView
aLinearLayout
dengan "bantalan" yang akan menempatkan beberapa ruang antara item. Buat ruang itu sangat kecil dan Anda mendapat garis.Berikut tampilan Pendaur Ulang di recyclerview_layout.xml
Dan di sini terlihat seperti apa setiap item (dan terlihat terbagi karena android: padding di LinearLayout yang mengelilingi segalanya.) Di file lain: cards_layout.xml
sumber
Solusi yang sangat mudah adalah dengan menggunakan RecyclerView-FlexibleDivider
Tambahkan ketergantungan:
Tambahkan ke recyclerview Anda:
Dan kamu selesai!
sumber
1.One of the Way adalah dengan menggunakan tampilan cardview dan pendaur ulang bersama kita dapat dengan mudah menambahkan efek seperti pembagi. ex. https://developer.android.com/training/material/lists-cards.html
2.dan lainnya adalah dengan menambahkan view sebagai divider ke list_item_layout dari view recycler .
sumber
Ini akan menambah ruang di setiap bagian atas dan bawah (atau kiri dan kanan). Kemudian Anda dapat mengaturnya untuk Anda
recyclerView
.SizeUtils.java
sumber