1127 Stimmen

Wie man Trennlinien und Abstände zwischen Elementen in RecyclerView hinzufügt

Dies ist ein Beispiel dafür, wie es vorher in der ListView-Klasse gemacht werden konnte, unter Verwendung der Parameter divider und dividerHeight:

Ich sehe jedoch keine solche Möglichkeit in der RecyclerView-Klasse.

In diesem Fall ist es okay, Margins zu definieren und/oder eine benutzerdefinierte Trennlinie direkt in das Layout eines Listenelements hinzuzufügen oder gibt es einen besseren Weg, um mein Ziel zu erreichen?

55voto

Faheem Punkte 782

Dies ist einfach, und Sie benötigen keinen so komplizierten Code:

DividerItemDecoration divider = new DividerItemDecoration(
    mRVMovieReview.getContext(), DividerItemDecoration.VERTICAL
);
divider.setDrawable(
    ContextCompat.getDrawable(getBaseContext(), R.drawable.line_divider)
);

mRVMovieReview.addItemDecoration(divider);

Fügen Sie dies in Ihr drawable hinzu: line_divider.xml

46voto

Gent Punkte 5805

Der Weg, wie ich die Divider-Ansicht und auch Divider-Abstände behandele, besteht darin, eine RecyclerView-Erweiterung hinzuzufügen.

1.

Fügen Sie eine neue Erweiterungsdatei hinzu und benennen Sie sie View oder RecyclerView:

RecyclerViewExtension.kt

und fügen Sie die setDivider Erweiterungsmethode in die RecyclerViewExtension.kt-Datei ein.

/*
* RecyclerViewExtension.kt
* */
import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView

fun RecyclerView.setDivider(@DrawableRes drawableRes: Int) {
    val divider = DividerItemDecoration(
        this.context,
        DividerItemDecoration.VERTICAL
    )
    val drawable = ContextCompat.getDrawable(
        this.context,
        drawableRes
    )
    drawable?.let {
        divider.setDrawable(it)
        addItemDecoration(divider)
    }
}

2.

Erstellen Sie eine Drawable-Ressourcendatei im drawable-Paket wie recycler_view_divider.xml:

wo Sie den linken und rechten Margenabstand auf android:insetLeft und android:insetRight festlegen können.

3.

In Ihrer Aktivität oder Ihrem Fragment, in dem die RecyclerView initialisiert ist, können Sie das benutzerdefinierte Drawable festlegen, indem Sie folgendes aufrufen:

recyclerView.setDivider(R.drawable.recycler_view_divider)

4.

Prost

RecyclerView-Reihe mit Divider.

43voto

Belal mazlom Punkte 1615

Ich denke, dass die Verwendung eines einfachen Trennelements Ihnen helfen wird

Um jedem Element einen Trenner hinzuzufügen:

1. Fügen Sie dies zum drawable-Verzeichnis hinzu line_divider.xml

2. Erstellen Sie die SimpleDividerItemDecoration-Klasse

Ich habe dieses Beispiel verwendet, um diese Klasse zu definieren:

https://gist.github.com/polbins/e37206fbc444207c0e92

package com.example.myapp;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.example.myapp.R;

public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration{
    private Drawable mDivider;

    public SimpleDividerItemDecoration(Resources resources) {
        mDivider = resources.getDrawable(R.drawable.line_divider);
    }

    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int top = child.getBottom() + params.bottomMargin;
            int bottom = top + mDivider.getIntrinsicHeight();

            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
}

3. In der Aktivität oder im Fragment, das RecyclerView verwendet, fügen Sie in onCreateView dies hinzu:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
 RecyclerView myRecyclerView = (RecyclerView) layout.findViewById(R.id.my_recycler_view);
 myRecyclerView.addItemDecoration(new SimpleDividerItemDecoration(getResources()));
 ....
 }

4. Um Abstand zwischen Elementen hinzuzufügen

Sie müssen nur das padding-Attribut zu Ihrem Elementansicht hinzufügen

..... item structure

42voto

Rohit Sharma Punkte 13497

Da ich ItemAnimators gesetzt habe. Der ItemDecorator betritt oder verlässt die Animation nicht.

Ich habe einfach eine Anzeigezeile in meiner Elementansichtslayoutdatei von jedem Element erstellt. Das hat mein Problem gelöst. DividerItemDecoration schien für einen einfachen Trennstrich zu viel zu sein.

29voto

Praveen Singh Punkte 2339

Wenn jemand nur einen Abstand von, sagen wir, 10 dp zwischen den Elementen hinzufügen möchte, kann dies durch Setzen eines Zeichenobjekts auf DividerItemDecoration erfolgen:

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(
    recyclerView.getContext(),
    layoutManager.getOrientation()
);

dividerItemDecoration.setDrawable(
    ContextCompat.getDrawable(getContext(), R.drawable.divider_10dp)
);

recyclerView.addItemDecoration(dividerItemDecoration);

Wo divider_10dp ein drawable-Ressource ist, die enthält:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X