web-dev-qa-db-ja.com

Android SDK?)のgetWidth / Height()とgetMeasuredWidth / Height()の違いは何ですか?

Androidのドキュメントによると ビューには2つのサイズ、つまり測定寸法図面寸法。測定された次元は、measure passonMeasure メソッド)で計算されたものであり、描画寸法は、画面上の実際のサイズです。特に、ドキュメントには次のように書かれています:

これらの値は、測定された幅と高さと異なる場合がありますが、必ずしもそうである必要はありません。

だから、私の質問は、何が描画寸法を測定寸法と異なるものにすることができるのでしょうか? onMeasure(int、int) メソッドがレイアウト要件を尊重する場合(パラメーターwidthMeasureSpecおよびheightMeasureSpec、SDKはどのようにビューが異なる描画サイズを持つべきであると判断できますか?

さらに、 Androidソースコード のどのような場所/どこで測定された幅/高さを使用して図面の幅/高さを計算しますか? ソースコードの表示 を調べてみましたが、測定された幅/高さを使用して最終的な幅/高さを計算する方法がわかりません。たぶんそれはパディングと関係があるかもしれませんが、私にはわかりません。

76
lgfischer

名前が示すように、測定とレイアウトの段階で測定幅/高さが使用されます。

例を挙げましょう。

ウィジェットはそれ自体を測定するように求められます。ウィジェットは、200ピクセルx 200ピクセルにすることを望んでいます。これは測定された幅/高さです。

レイアウトフェーズ中、つまりonLayoutメソッド内。このメソッドは、子のmeasuredWidth/heightを使用するか、ビューのlayoutメソッドを呼び出して新しい幅/ heightを割り当てることができます。

onLayoutメソッドがchildview.layout(0,0,150,150)を呼び出して、ビューの幅/高さが測定された幅/高さと異なるようになったとしましょう。

OnLayoutメソッドの外でmeasuredWidth/heightを使用しないことをお勧めします。

要約する 。

  1. onMeasure-> measuredWidth/measuredHeightを設定します
  2. onLayout->ウィジェットの幅/高さを設定します。

さらに
public void View.layout(int l, int t, int r, int b)
位置とサイズの割り当てが行われる場所のようです。

85
Prakash Nadar