web-dev-qa-db-ja.com

RecyclerViewで複数の列にまたがる

そのため、私が目指しているのは、レイアウトをずらして配置することですが、リストの最初の項目は2列にまたがる必要があります。最初の2行も高さが固定されています。 2列にまたがる最初のアイテムを除いて、すべてが機能しています。

StaggeredGridLayoutManagerでRecyclerView.Adapterを使用しています。すぐに使える機能ではないようです。どこから始めればいいのかわからないカスタムレイアウトマネージャーを作成できると思います。検索しようとしましたが、アイテムを複数の列にまたがらせる方法については何も見つかりません。

以下の画像は、リストで探しているものです。

Staggered layout

48
DDukesterman

現在、StaggeredGridLayoutManagerはすべての列にまたがるビューのみをサポートし(垂直に構成されたレイアウトの場合)、任意の数のビューはサポートしていません。

それでもすべての列にまたがる場合は、アダプターの実装でこれを行う必要があります。

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
    layoutParams.setFullSpan(true);
}

私見、StaggeredGridLayoutManagerはまだ非常に開発中であり、Googleはフィードバックのためにそれを使用することを望んでいます:(

50
mato

垂直に構成されたレイアウトのすべての列にまたがるようにしたことは、新しいLayoutParamsを作成し、アダプター実装でfull spanをtrueに設定することでした。

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    layoutParams.setFullSpan(true);
    viewHolder.itemView.setLayoutParams(layoutParams);
}
9
ljmelgui