Sie können RecyclerView.ItemDecoration
verlängern und onDraw
und getItemOffsets
übersteuern.
Verwenden Sie DividerItemDecoration
als Referenz und kopieren Sie über das Wesentliche in Ihre eigene Klasse.
Wenn Sie dies tun, werden Sie mit etwas so enden:
public class SimpleDividerDecoration extends RecyclerView.ItemDecoration {
private Drawable divider;
private final Rect bounds = new Rect();
public SimpleDividerDecoration(Drawable divider) {
this.divider = divider;
}
@Override
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
final int left = 0;
final int right = parent.getWidth();
final int childCount = parent.getChildCount() - 1;
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
parent.getDecoratedBoundsWithMargins(child, bounds);
final int bottom = bounds.bottom + Math.round(child.getTranslationY());
final int top = bottom - divider.getIntrinsicHeight();
divider.setBounds(left, top, right, bottom);
divider.draw(canvas);
}
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
final int position = parent.getChildAdapterPosition(view);
final int lastPosition = parent.getAdapter().getItemCount() - 1;
if (position < lastPosition) {
outRect.set(0, 0, 0, divider.getIntrinsicHeight());
}
}
}
Wenn Sie dies vergleichen mit DividerItemDecoration
, werden Sie feststellen, dass es Unterstützung für horizontale Layouts entfernt. Außerdem können Sie eine drawable
direkt an den Konstruktor übergeben.
Die - 1
Sie in beiden Verfahren sehen zum Entfernen des letzten Teiler verantwortlich:
- Es verhindert
onDraw
aus den letzten Teiler zeichnen.
- Es verhindert
getItemOffsets
Platz (Pixel) für den letzten Teiler zu besetzen.
EXPERIMENT
- 1
von getItemOffsets
, entfernen, aber es in onDraw
verlassen.
- Aktivieren Sie "Layoutgrenzen anzeigen" in den Entwickleroptionen auf Ihrem Telefon .
- Stellen Sie Ihre Teiler Höhe etwas groß wie
20dp
Wenn Sie Ihr Projekt jetzt laufen, werden Sie feststellen, dass, obwohl der letzte Teiler nicht gezogen wird, noch Platz für sie vorgesehen ist.
Verwenden Sie nicht den Standard-Teiler. Sie fügen den Teiler in Ihrem Xml-Element für die Recycleransicht hinzu und zeigen oder verbergen die Basis nach Bedarf. – james
poste deinen Teiler-Dekorateur-Code. –