2011-12-20 10 views
1

子のxmlファイルで定義されている幅と高さの値を持つ子ビューを測定する方法を知りたいと思います。Android:xmlに定義されたサイズの子を測定する

child.measure(MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY)); 

をしかし、どのようにXMLコードからchildWidthchildHeightを取得するには:

は、私は私のカスタムViewGrouponMeasure()方法で私が呼び出す必要があることを知っていますか?

答えて

1

あなたは子供のLayoutParamsからそれらを取得することができます。

LayoutParams l = child.getLayoutParams(); 
childWidth = l.width; 
childHeight = l.height; 

のViewGroupのコンストラクタは、XMLからlayout_heightlayout_widthパラメータを読み取ることができます。

+0

私はこれを試しましたが、 'LayoutParams'オブジェクトの代わりにnullを返します。 – teoREtik

+0

@teoREtik、ViewGroupのソースを投稿できますか?私は自分自身でViewGroupを拡張しようとしましたが、子供のための 'null'レイアウトパラメータがないことがわかります。基本クラスとは何ですか?どのメソッドをオーバーライドしていますか? –

+0

私の基本クラスはAdapterViewですが、実際には 'onLayout()'メソッドに子を追加して測定します。 – teoREtik

0

は、上記のコードでは、この

RelativeLayout.LayoutParams params = 
    (android.widget.RelativeLayout.LayoutParams)child.getLayoutParams(); 
childWidth = params.width; 
childHeight = params.height; 

を試してみてください私は、これは古い質問ですけど、あなたの親のレイアウト

+0

Darth Belegのコメントを見てください – teoREtik

2

RelativeLayoutを交換してください。基本的には、ViewGroupによって提供される機能measureChildを使用します。この機能は適切に測定します。

+1

これは 'child.measure()'とまったく同じですが、この場合は最初のパラメータとして子を渡すだけです。 – teoREtik

+1

いいえ、私はそれが同じではないと思います。私はまだ測定とレイアウトのライフサイクルのニュアンスは分かっていませんが、child.measure()を呼び出すことで、子を正しく測定できませんでした(指定した高さを無視して、代わりにwrap_contentを実行していました)。私がmeasureChild()への呼び出しを置き換えたとき、期待通りに機能しました。誰かがこの2つの呼び出しの違いを詳しく説明できるなら、本当に感謝します。 – AngraX

関連する問題