8

recyclerView が表示される前に測定すると、現在問題が発生しています。「展開」アニメーションを開始するには、measuredHeight が必要です。

これは、私が取り組んでいるコードの gridView に対して以前に行われたもので、GridLayoutManager を使用して RecyclerView に移行しようとしています。

final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, View.MeasureSpec.AT_MOST);
mGridView.measure(widthSpec, heightSpec);
int targetHeight = mGridView.getMeasuredHeight();

gridView で動作していましたが、recyclerView で同じ測定仕様で測定メソッドを呼び出すと、結果は常に 16777215 になり、何かの最大値である可能性がありますが、何とも言えません。

次の測定仕様で測定することにより、画面にレンダリングされる前にビューを測定できることを説明する投稿を見ました。

final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);

しかし、recyclerView.getMeasuredHeight(); に対して 0 を取得します。

画面にレンダリングされる前に recyclerView の高さを適切に測定する方法はありますか?

ありがとう。

4

3 に答える 3

2

yigit 投稿のおかげで、子のビューを手動で膨らませることで、最終的に将来の recyclerView の高さを計算できました。

final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, View.MeasureSpec.AT_MOST);

そして最後に、そのmeasuredHeightにgridLayoutManagerに含まれる行数を掛けます。RecycleViews の layoutManagers で WRAP_CONTENT がサポートされることを願っています。

于 2014-10-23T11:13:21.410 に答える