Как я могу заполнить 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
?
Ответы
Ответ 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);