Dies ist ein Beispiel dafür , wie es in der zuvor hätte getan werden können ListView
Klasse, die mit Teiler und dividerHeight Parameter:
<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"/>
Eine solche Möglichkeit sehe ich jedoch in der RecyclerView
Klasse nicht.
<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"/>
Ist es in diesem Fall in Ordnung, Ränder zu definieren und / oder eine benutzerdefinierte Teileransicht direkt in das Layout eines Listenelements einzufügen, oder gibt es eine bessere Möglichkeit, mein Ziel zu erreichen?
android
android-recyclerview
divider
EyesClear
quelle
quelle
com.homeretailgroup.argos.android.view.decorators.DividerItemDecoration
und verwenden Sie es so:mRecyclerView.addItemDecoration(new DividerItemDecoration(activity, LinearLayoutManager.VERTICAL));
Antworten:
Oktober 2016 Update
Mit der Version 25.0.0 der Android Support Library wurde folgende
DividerItemDecoration
Klasse eingeführt :Verwendungszweck:
Vorherige Antwort
Einige Antworten verwenden entweder Methoden, die inzwischen veraltet sind, oder geben keine vollständige Lösung an. Daher habe ich versucht, eine kurze, aktuelle Zusammenfassung zu erstellen.
Im Gegensatz dazu
ListView
hat dieRecyclerView
Klasse keine teilerbezogenen Parameter. Stattdessen müssen Sie erweiternItemDecoration
, einRecyclerView
‚s innere Klasse:Vertical
AbstandItemDecoration
Erweitern Sie
ItemDecoration
, fügen Sie einen benutzerdefinierten Konstruktor hinzu, der Speicherplatzheight
als Parameter verwendet, und überschreiben Sie diegetItemOffsets()
Methode:Wenn Sie kein Leerzeichen unter dem letzten Element einfügen möchten, fügen Sie die folgende Bedingung hinzu:
Hinweis: Sie können auch ändern
outRect.top
,outRect.left
undoutRect.right
Eigenschaften für die gewünschte Wirkung.Teiler
ItemDecoration
Verlängern
ItemDecoration
und außer Kraft setzenonDraw()
Methode:Sie können entweder den ersten Konstruktor aufrufen, der die Standardattribute für Android-Teiler verwendet, oder den zweiten Konstruktor, der Ihr eigenes Zeichenelement verwendet, z. B. drawable / divider.xml
Hinweis: Wenn Sie möchten, dass der Teiler über Ihre Elemente gezogen wird, überschreiben Sie
onDrawOver()
stattdessen die Methode.Verwendungszweck
So verwenden Sie Ihre neue Klasse add
VerticalSpaceItemDecoration
oderDividerSpaceItemDecoration
toRecyclerView
, zum Beispiel in deronCreateView()
Methode Ihres Fragments :Es gibt auch die Bibliothek von Lucas Rocha , die den Prozess der Artikeldekoration vereinfachen soll. Ich habe es aber nicht versucht.
Zu seinen Merkmalen gehören:
quelle
onDraw()
. Ich verweise nur auf bereits vorhandene Instanzen.canvas.drawLine(startX, startY, stopX, stopY, mPaint)
inonDrawOver
? Leistungsunterschiede?Einfach hinzufügen
Möglicherweise müssen Sie auch die Abhängigkeit hinzufügen
compile 'com.android.support:recyclerview-v7:27.1.0'
BEARBEITEN:
Um es ein wenig anzupassen, können Sie ein benutzerdefiniertes Zeichen hinzufügen:
Es steht Ihnen frei, benutzerdefinierte Zeichen zu verwenden, zum Beispiel:
quelle
Configuration
für vertikale Teiler verwenden:if (orientation == Configuration.ORIENTATION_LANDSCAPE) { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL)); } else { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));}
Darf ich Ihre Aufmerksamkeit auf diese spezielle Datei auf Github von Alex Fu lenken: https://gist.github.com/alexfu/0f464fc3742f134ccd1e
Es handelt sich um die DividerItemDecoration.java-Beispieldatei "direkt aus den Support-Demos" ( https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS ).
Nach dem Importieren dieser Datei in mein Projekt konnte ich Trennlinien gut abrufen und als Elementdekoration zur Recycler-Ansicht hinzufügen.
So sieht mein onCreateView in meinem Fragment aus, das das Recyclerview enthält:
Ich bin sicher, dass zusätzliches Styling durchgeführt werden kann, aber es ist ein Ausgangspunkt. :) :)
quelle
Einfache
ItemDecoration
Implementierung für gleiche Abstände zwischen allen Elementen.quelle
getChildPosition
ist jetzt veraltet,getChildAdapterPosition
kann stattdessen verwendet werden.super.getItemOffsets
, sonst werden Ihre Offsets überschrieben.getChildLayoutPosition
nicht verwendet werden?Die einfache Möglichkeit besteht darin, die Hintergrundfarbe für RecyclerView und eine andere Hintergrundfarbe für Elemente festzulegen. Hier ist ein Beispiel ...
und das TextView- Element (es kann jedoch alles sein) mit dem unteren Rand "x" dp oder px.
Die Ausgabe ...
quelle
Ich denke, die Verwendung eines einfachen Teilers wird Ihnen helfen.
So fügen Sie jedem Element einen Teiler hinzu:
1- Fügen Sie diesen zum zeichnbaren Verzeichnis line_divider.xml hinzu
2- SimpleDividerItemDecoration-Klasse erstellen
Ich habe dieses Beispiel verwendet, um diese Klasse zu definieren:
https://gist.github.com/polbins/e37206fbc444207c0e92
3- Fügen Sie in Aktivitäten oder Fragmenten, die RecyclerView verwenden, in onCreateView Folgendes hinzu:
4- Um den Abstand zwischen Elementen
zu erhöhen, müssen Sie Ihrer Elementansicht lediglich eine Auffüllungseigenschaft hinzufügen
quelle
Wie ich eingestellt habe
ItemAnimators
. SieItemDecorator
treten nicht zusammen mit der Animation ein oder aus.Am Ende hatte ich einfach eine Ansichtszeile in meiner Layoutdatei für die Elementansicht jedes Elements. Es hat meinen Fall gelöst.
DividerItemDecoration
fühlte sich zu viel Zauberei für einen einfachen Teiler.quelle
Das ist einfach, Sie brauchen keinen so komplizierten Code
Fügen Sie dies in Ihre Zeichnungsdatei ein: line_divider.xml
quelle
Da es noch keinen richtigen Weg gibt, dies mit Material Design richtig zu implementieren, habe ich nur den folgenden Trick ausgeführt, um dem Listenelement direkt einen Teiler hinzuzufügen:
quelle
Die Art und Weise, wie ich mit der Teileransicht und auch mit Teilereinsätzen umgehe, besteht darin, eine RecyclerView-Erweiterung hinzuzufügen.
1.
Fügen Sie eine neue Erweiterungsdatei hinzu, indem Sie View oder RecyclerView benennen:
und fügen Sie die
setDivider
Erweiterungsmethode in die Datei RecyclerViewExtension.kt ein.2.
Erstellen Sie eine Drawable-Ressourcendatei innerhalb des
drawable
Pakets wie folgtrecycler_view_divider.xml
:Hier können Sie den linken und rechten Rand an
android:insetLeft
und angebenandroid:insetRight
.3.
In Ihrer Aktivität oder Ihrem Fragment, in dem die RecyclerView initialisiert ist, können Sie die benutzerdefinierte Zeichnungsfunktion festlegen, indem Sie Folgendes aufrufen:
4.
Prost 🍺
quelle
Wenn jemand beispielsweise nur einen Abstand von 10 dp zwischen Elementen hinzufügen möchte, können Sie dies tun, indem Sie ein Zeichen auf Folgendes setzen
DividerItemDecoration
:Wo
divider_10dp
ist eine zeichnbare Ressource, die Folgendes enthält:quelle
OKTOBER 2016 UPDATE
Mit der Unterstützungsbibliothek v25.0.0 ist endlich eine Standardimplementierung grundlegender horizontaler und vertikaler Teiler verfügbar!
https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html
quelle
Dies löst das Problem nicht wirklich, aber als vorübergehende Problemumgehung können Sie die useCompatPadding- Eigenschaft für die Karte in Ihrem XML-Layout so festlegen , dass sie genauso misst wie bei Versionen vor Lollipop.
quelle
Für diejenigen , die nur für suchen Räume zwischen den einzelnen Posten in der zu
RecyclerView
sehen , mein Ansatz , wo man gleiche Räume zwischen allen Einzelteile erhalten, außer in der ersten und letzten Punkte , in denen ich einen größeren Polster gab. Ich wende die Polsterung nur links / rechts in der HorizontalenLayoutManager
und oben / unten in der Vertikalen anLayoutManager
.dimension.xml
quelle
Fügen Sie Ihrer Ansicht einen Rand hinzu, es hat bei mir funktioniert.
Wenn Sie nur den gleichen Abstand hinzufügen und dies in XML tun möchten, stellen Sie einfach
padding
IhrenRecyclerView
und den gleichen Betrag fürlayoutMargin
das Element ein, das Sie in Ihren aufblasenRecyclerView
, und lassen Sie die Hintergrundfarbe die Abstandsfarbe bestimmen.quelle
overscroll
Effekt beim Ziehen am Ende der Liste eine unnötige Auffüllung angewendet wird, wenn die Auffüllung angewendet wirdRecyclerView
<?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>
Fügen Sie dem Layout Ihres Recyclingartikels einfach wie folgt einen Hintergrund hinzu
Erstellen Sie die folgende shape_border.xml in einem zeichnbaren Ordner
Hier ist das Endergebnis - eine RecyclerView mit Teiler.
quelle
parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1
wahrscheinlichparent.getChildAdapterPosition(view) > 0
mit demoutRect.bottom = mVerticalSpaceHeight
WerdenoutRect.top = mVerticalSpaceHeight
sein sollte, sollte es die akzeptierte Antwort sein.Ich habe die DividerItemDecoration aus einem älteren Kern gegabelt und sie an meinen Anwendungsfall angepasst. Außerdem habe ich sie so geändert, dass die Teiler so gezeichnet werden, wie sie in ListView gezeichnet werden, einschließlich eines Teilers nach dem letzten Listenelement. Dies behandelt auch vertikale ItemAnimator-Animationen:
1) Fügen Sie diese Klasse Ihrem Projekt hinzu:
2) Fügen Sie den Dekorator zu Ihrer RecylerView hinzu:
quelle
Anstatt ein
shape xml
zum Ändern der Teilerhöhe und -farbe zu erstellen . Sie können programmgesteuert wie erstellenquelle
Fügen Sie diese ItemDecoration aus einer Google-Suche zu
RecyclerView
:quelle
Dieser Link hat für mich wie ein Zauber gewirkt:
https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36
Dann in Ihrer Tätigkeit:
Oder dies, wenn Sie ein Fragment verwenden:
quelle
mShowFirstDivider = false
,mShowLastDivider = true
, aber es wird nicht funktionieren. Irgendeine Idee warum?Wir können die Gegenstände mit verschiedenen Dekoratoren dekorieren, die an die Recycling-Ansicht angehängt sind, wie z. B. DividerItemDecoration:
Verwenden Sie einfach Folgendes ... aus der Antwort von EyesClear
} und verwenden Sie dann die obigen Schritte wie folgt
Dadurch werden Teiler zwischen den einzelnen Elementen in der Liste angezeigt, wie unten gezeigt:
Und für diejenigen, die nach weiteren Details suchen, lesen Sie diese Anleitung unter Verwendung der RecyclerView _ CodePath Android Cliffnotes
Einige Antworten hier schlagen die Verwendung von Rändern vor, aber der Haken ist folgender: Wenn Sie sowohl den oberen als auch den unteren Rand hinzufügen, werden beide zwischen Elementen hinzugefügt und sie sind zu groß. Wenn Sie nur eines hinzufügen, wird weder am oberen noch am unteren Rand der gesamten Liste ein Rand angezeigt. Wenn Sie die Hälfte des Abstands oben und die Hälfte unten hinzufügen, sind die äußeren Ränder zu klein.
Daher ist die einzige ästhetisch korrekte Lösung der Teiler, den das System richtig anwenden kann: zwischen Elementen, jedoch nicht über oder unter Elementen.
Bitte lassen Sie mich Zweifel in den Kommentaren unten wissen :)
quelle
DividerItemDecoration
Code aussieht.Zu spät, aber
GridLayoutManager
ich benutze dies:Diese Arbeit für jede Anzahl von Spannen, die Sie haben.
Ollie.
quelle
FlexboxLayoutManager
?Sie können mit programmatisch einfach hinzufügen.
Wenn Ihr Layout-Manager Linearlayout ist, können Sie Folgendes verwenden:
Quelle
quelle
Ich habe das Gefühl, dass eine einfache, codebasierte Antwort erforderlich ist, die kein XML verwendet
quelle
Wenn Sie den gleichen Platz für Elemente hinzufügen möchten, ist es am einfachsten, Kartenelementen einen oberen + linken Abstand für RecycleView und einen rechten + unteren Rand hinzuzufügen.
dimension.xml
list_item.xml
list.xml
quelle
Ich habe eine Zeile im Listenelement wie unten hinzugefügt
1px zeichnet die dünne Linie.
quelle
Das
RecyclerView
ist ein bisschen anders als dasListView
. EigentlichRecyclerView
braucht das eineListView
ähnliche Struktur drin. Zum Beispiel aLinearLayout
. DasLinearLayout
hat Parameter für die Aufteilung jedes Elements. Im folgenden Code habe ich eineRecyclerView
ausCardView
Objekten innerhalb einesLinearLayout
mit einem „padding“ , die etwas Platz zwischen den einzelnen Posten wird gesetzt. Machen Sie diesen Raum wirklich klein und Sie erhalten eine Linie.Hier ist die Recycler-Ansicht in recyclerview_layout.xml
Und hier ist, wie jedes Element in einer anderen Datei aussieht (und aufgrund des Android: Auffüllen im LinearLayout, das alles umgibt, als geteilt angezeigt wird): card_layout.xml
quelle
Eine wirklich einfache Lösung ist die Verwendung RecyclerView-FlexibleDivider
Abhängigkeit hinzufügen:
Fügen Sie Ihrem Recycling-Überblick hinzu:
Und du bist fertig!
quelle
1. Einer der Wege ist , dass wir durch die gemeinsame Verwendung von Kartenansicht und Recycler-Ansicht auf einfache Weise Effekte wie Trennwände hinzufügen können. Ex. https://developer.android.com/training/material/lists-cards.html
2.und andere ist das Hinzufügen einer Ansicht als Teiler zu list_item_layout der Recycler-Ansicht .
quelle
Dadurch wird oben und unten (oder links und rechts) Platz für jedes Element hinzugefügt. Dann können Sie es auf Ihre festlegen
recyclerView
.SizeUtils.java
quelle