Ashkan Sarlak Ashkan Sarlak - 3 months ago 20
Android Question

How can I fill RecyclerView with GridLayoutManager from right to left

I'm trying to fill some data into a

RecyclerView
with
GridLayoutManager
:

GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);


This will fill the data into the grid from left to right. The first item will be put into top-left place, etc.

But the app I'm developing is designed for an RTL language, so I need to make it fill from right to left.

I tried to change the last argument to
true
. But it just scrolled the
RecyclerView
all the way down.

Also setting
layoutDirection
attribute for
RecyclerView
doesn't work (without considering that my min API is 16 and this attribute is added for API17+):

<android.support.v7.widget.RecyclerView
android:id="@+id/grid"
android:layoutDirection="rtl"
android:layout_width="match_parent"
android:layout_height="match_parent"/>


How can I create a right to left filled grid using
RecyclerView
?

Answer

Create a class that extends GridLayoutMAnager ,and override the isLayoutRTL() method like this:

public class RtlGridLayoutManager extends GridLayoutManager {

    public RtlGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public RtlGridLayoutManager(Context context, int spanCount) {
        super(context, spanCount);
    }

    public RtlGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
        super(context, spanCount, orientation, reverseLayout);
    }

    @Override
    protected boolean isLayoutRTL(){
        return true;
    }
}