一部のデータをRecyclerView
にGridLayoutManager
で埋めようとしています:
GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
これにより、グリッドに左から右のデータが入力されます。最初のアイテムは左上に配置されます。
しかし、私が開発しているアプリはRTL言語用に設計されているので、それを右から左で埋める必要があります。
最後の引数をtrue
に変更しようとしました。しかし、RecyclerView
を下にスクロールしただけです。
また、layoutDirection
のRecyclerView
属性を設定しても機能しません(私の最小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
を使用して右から左の塗りつぶしグリッドを作成するにはどうすればよいですか?
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;
}
}
Mohammadの答えは正しいですが、新しいクラスを作成する必要はありません。 isLayoutRTLメソッドを単純にオーバーライドできます。
GridLayoutManager lm = new GridLayoutManager(this, 2) {
@Override
protected boolean isLayoutRTL() {
return true;
}
};
それを行うためのより良い方法があります
RecycleViewのレイアウト方向をプログラムで変更できます
workHourRecycler = view.findViewById(R.id.market_hours_recycler);
workHourRecycler.setLayoutManager(new GridLayoutManager(getContext(),4));
//Programtically set the direction
workHourRecycler.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
一見すると、GridLayouManagerは、getLayoutDirection()
がViewCompat.LAYOUT_DIRECTION_RTL
を与えると、 行を右から埋める 必要があります。通常、この方向はRecyclerView's
コンテナから継承されます。
しかし、これが期待どおりに機能しない場合、またはAPI 16にプッシュダウンする必要がある場合、またはRTLサポートの実装が不適切なデバイスの場合は、githubからGridLayoutManager
をプルして、カスタムマネージャーを使用できます。好みに合わせて調整してください。
ストックGridLayoutManager
を拡張し、 layoutChunk() をオーバーライドするだけで十分な場合があります。