4

私は 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);
}
4

3 に答える 3

5

これを行うには、アダプター内の項目の位置を尊重しない必要がありますが、これはほとんど望まれません。あなたの最善のオプションは、アダプター内のアイテムを再注文することです

于 2014-11-11T07:48:53.503 に答える