写真のリストに千鳥リサイクラー ビュー レイアウトを使用しています。2 つの列の間にスペースを確保しながら、側面の間隔をゼロにしたい。添付の写真に見られる間隔を取得するために、アイテム装飾サブクラスを使用しています。左右の間隔を制御できることはわかっていますが、問題は、写真がどの列にあるのかわからないことです。ずらしたレイアウトマネージャーが独自の並べ替えを行っているようです。使用してみましgetChildAdapterPosition
たが、レイアウト内の写真の実際の位置ではなく、データ ソース配列内の位置を返すようです。これにどのようにアプローチすべきか考えていますか?
8761 次
2 に答える
40
私はそれを機能させることができました。私の場合、画面の左端または右端に境界線は必要ありません。真ん中と下に境界線が必要です。解決策は、StaggeredGridLayoutManager.LayoutParams タイプのビューのレイアウト パラメータを取得することです。これらのパラメーターでは、ビューがどのインデックスにあるかを示す spanIndex を取得できます。したがって、spanCount が 2 の場合、左側のビューの spanIndex は 0 になり、右側のビューの spanIndex は 1 になります。
これが私のコードです。多分それはあなたを助けるでしょう。
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpaceItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
StaggeredGridLayoutManager.LayoutParams lp = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
int spanIndex = lp.getSpanIndex();
if (position > 0) {
if (spanIndex == 1) {
outRect.left = space;
} else {
outRect.right = space;
}
outRect.bottom = space * 2;
}
}
}
私の場合、最初に位置を取得する必要があります。これは、インデックス 0 に境界線を持たないヘッダー ビューがあるためです。その後、スパン インデックスを取得し、それに応じてそのビューに必要な境界線を設定します。最後に、すべてのビューに下の境界線を設定します。
于 2016-02-05T14:29:40.297 に答える