2012-05-02 13 views
11

Fragmentビューのすべてのコンポーネントの幅と高さを評価済みです。だから私に教えてくれるいくつかの通知が必要です。フラグメントレイアウトフェーズのビューはすでに完了しています。Fragmentビューのコンポーネントの幅と高さを取得

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

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

レイアウトがフラグメントのビューで行われた後にいくつかの呼び出しを行う方が良いですか?

+0

関連の質問http://stackoverflow.com/questions/14397959/capture-layout-resize-before-api-11 –

答えて

1

実際にレイアウトパスを手動でトリガーすることができます。View.measure(int,int)に適切なMeasureSpecを呼び出すだけで済みます。例えば、フラグメントは、親ビューの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

+0

サイズは参考サイズのみを提示し、レイアウト後に実際のサイズがわかります。そして、私はそれを手動で実行する必要はありません。なぜなら、Androidはそれ自体をもう一度実行するからです(私は思っています)。 – ATom

+0

実際には推奨サイズではありません。メジャーパスは、ビューに「これはあなたが得たものであり、あなたが望むように使用する」ことを伝えるために使用されます。たとえば、ListViewでは、widthの制約は正確に、heightの制約はUNSPECIFIEDです。測定されたサイズがレイアウトされたサイズと常に同じではないということは間違いありませんが、ほとんど常にそうです。あなたがしようとしていることは本当にわかりません。 –

+0

私は断片の後で通知を受ける必要があり、その内容はすでに測定とレイアウトの通過を完了しており、すべての寸法は最終的です。 – ATom