1

RecyclerViewあり、項目を表示wrap_contentGridLayoutManagerません。アイテムのためのスペースを作るために拡大しません。

まず、問題 (74772) が未解決であることに気付きましたが、2015 年 12 月の時点ではまだ解決されておらず、「2016 年初頭」</a> まで解決されていません。

誰かがこれを作成したようで、GithubCustomGridLayoutManagerでも利用できますが、まだすべてのアイテムに十分なスペースを確保していないようで、親に十分なスペースがある場合でも、トリミングされたように見えます (ただしスクロール可能) 。RecyclerViewRecyclerView

RecyclerViewアイテムを適切にサイズアップし、スクロールせずに表示する方法についてのアイデアはありますか?

4

1 に答える 1

-1

そのクラスは、測定時に最初の子と各行の最初の子のみを考慮しているようです(どちらの次元が割り当てられても、方向によって異なります)。これを参照してください(私によるコメント):

if (getOrientation() == HORIZONTAL) {
    if (i % getSpanCount() == 0) { // only for first child of row.
        width = width + mMeasuredDimension[0];
    }
    if (i == 0) { // only for first item.
        height = mMeasuredDimension[1];
    }
}

オリエンテーションでも同じことが起こりますVERTICAL(次の にキャッチされelseます)。

私のニーズを説明するために、各子を測定し、各行で最大の子を確認してから、最大の制約を行に適用しました。各行の測定が終了したら、行のサイズを必要な全体のサイズに追加しました。

if (getOrientation() == VERTICAL) {
    rowMeasure[1] = Math.max(rowMeasure[1], childMeasure[1]);
    rowMeasure[0] += childMeasure[0];
} else {
    rowMeasure[0] = Math.max(rowMeasure[0], childMeasure[0]);
    rowMeasure[1] += childMeasure[1];
}

// When finishing the row (last item of row), adds the row dimensions to the view.
if (i % getSpanCount() == getSpanCount() - 1 || i == state.getItemCount() - 1) {
    rowsSized[addIndex] += rowMeasure[addIndex];
    rowsSized[maxIndex] = Math.max(rowsSized[maxIndex], rowMeasure[maxIndex]);
    rowMeasure[addIndex] = 0;
    rowMeasure[maxIndex] = 0;
}

完全なクラスは、この回答の最後にあります。上記はロジックのみを示しています。

今週この問題に遭遇し、昨日 (2008 年 12 月) に少なくとも私のニーズのために解決しようとしたため、まだこのソリューションを完全にテストしていませんでした。

ここで、この問題にどのように取り組んだかを確認できます。WrappedGridLayoutManager

issue のコメントに記載されているように、代わりにits を使用してRecyclerView'sに注意を払う必要があります。また、これがプレレイアウトの条件などの影響を受けるかどうか、またはどのように影響を受けるかを確認することをお勧めします。StategetItemCount()getViewForPosition(int)

于 2015-12-09T06:43:15.827 に答える