Подтвердить что ты не робот

Как я могу заполнить RecyclerView с помощью GridLayoutManager справа налево

Я пытаюсь заполнить некоторые данные в RecyclerView с помощью GridLayoutManager:

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

Это заполнит данные в сетке от слева направо. Первый элемент будет помещен в верхнее левое место и т.д.

Но приложение, которое я разрабатываю, предназначено для языка RTL, поэтому мне нужно сделать его заполнением от справа налево.

Я попытался изменить последний аргумент на true. Но он просто прокрутил RecyclerView до конца.

Также установка атрибута layoutDirection для RecyclerView не работает (без учета того, что my min API равен 16, и этот атрибут добавлен для API17 +):

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

Как создать сетку справа налево с помощью RecyclerView?

4b9b3361

Ответ 1

Создайте класс, который расширяет GridLayoutMAnager и переопределяет метод isLayoutRTL() следующим образом:

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;
    }
}

Ответ 2

На первый взгляд, GridLayouManager должен заполнить строки справа, когда getLayoutDirection() дает ViewCompat.LAYOUT_DIRECTION_RTL. Обычно это направление будет унаследовано от контейнера RecyclerView's.

Но если это не работает так, как ожидалось, или вам нужно отбросить его до API 16, или у вас какое-то устройство с плохой реализацией поддержки RTL, вы можете просто вытащить GridLayoutManager из github и использовать собственный менеджер что вы настроены по своему вкусу.

Этого может быть достаточно, чтобы увеличить запас GridLayoutManager и переопределить layoutChunk().

Ответ 3

Его очень простой, просто метод вызова setReverseLayout as,

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