Equal spacing between elements inside RecyclerView using StaggeredGridLayoutManager?

We are currently trying to do this using this class:

public class EqualItemSpacingDecoration extends RecyclerView.ItemDecoration {

    private int space;

    public EqualItemSpacingDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        outRect.bottom = space;
        if (parent.getChildLayoutPosition(view) < 2)
            outRect.top = space;
        if (parent.getChildLayoutPosition(view) % 2 == 0) {
            outRect.left = space;
            outRect.right = space / 2;
        } else {
            outRect.left = space / 2;
            outRect.right = space;
        }
    }

}

And use it with this code:

recycler.addItemDecoration(new EqualItemSpacingDecoration(12));

But the interval is not equal. The third element in the screenshot below has the wrong spacing: The interval is incorrect with the third element.

How can I solve this problem?

+4
source share

Source: https://habr.com/ru/post/1623699/


All Articles