11

フラグメント ビューですべてのコンポーネントの評価済みの幅と高さにアクセスする必要があります。そのため、フラグメント レイアウト フェーズの表示が既に完了していることを知らせる通知が必要です。

アクティビティではonWindowFocusChanged(boolean hasFocus)ライフサイクルメソッドを使用できますが、フラグメントにはこのメソッドがありません。

私が見つけた唯一の方法は使用getView().addOnLayoutChangeListener()です。しかし、それは複数回呼び出し、最後の呼び出しだけが私にとって役に立ちます。

フラグメントのビューでレイアウトが完了した後にいくつかを呼び出すより良い方法はありますか?

4

1 に答える 1

1

View.measure(int,int)実際には手動でレイアウト パスをトリガーできます。適切な MeasureSpecs を使用して呼び出すだけです。たとえば、フラグメントが親ビューのparentViewにアタッチされ、同じサイズにする場合は、次のようにします。

View fragmentView = fragment.getView();
fragmentView.measure(MeasureSpec.makeMeasureSpec(parentView.getMeasuredWidth(),
                                                 MeasureSpec.EXACTLY),
                     MeasureSpec.makeMeasureSpec(parentView.getMeasuredHeight(),
                                                 MeasureSpec.EXACTLY));

メジャー/レイアウト パスの仕組みの詳細: http://developer.android.com/reference/android/view/View.html#Layout

于 2012-05-02T07:25:04.917 に答える