私は StaggeredGridLayoutManager をいじっていて、私が望むものに近いものを持っています。2 行の水平方向のずらしたグリッドがあります。一部のアイテムは 1 行の高さで、他のアイテムは両方の行にまたがっています。単一行の高さのアイテムを積み上げたいのですが、ギャップ戦略を GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS に設定することで達成できると考えましたが、これはうまくいかないようです。
現時点の:
___ ___ ___ ___ |___| | | | | |___| | | | | | | | | | | | | |___| |___|
私が欲しいもの:
___ ___ ___ |___| | | | | | | | | ___ | | | | | | | |___| |___| |___|
関連するコード スニペット:
recyclerview のレイアウト マネージャーを設定します。
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(layoutManager);
カスタム アダプターの onBindViewHolder を次に示します (これは単純化した例です)。基本的に、CardView 内に ImageView があります (CardView は高さと幅の wrap_content に設定されています)。
if(position%3==0) {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 75, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);
StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(false);
}
else {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);
StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(true);
}