1. ホーム
  2. android

[解決済み] Android SDKのgetWidth/Height()とgetMeasuredWidth/Height()の違いは何ですか?

2022-12-06 01:42:32

質問

その Android ドキュメントによると によると、ビューには 2 種類のサイズがあります。 測定された寸法 図面寸法 . 測定された寸法は メジャーパス で計算されたものです (その onMeasure メソッド)、一方 図面寸法 は画面上の実際のサイズです。特に、ドキュメントに書かれている

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

そこで質問ですが、図面寸法が測定された寸法と異なるのはなぜでしょうか?もし onMeasure(int,int) メソッドがレイアウトの要件 (パラメータとして与えられる widthMeasureSpec 高さ指定 を追加した場合、SDKはどのようにビューが異なる描画サイズを持つべきであると決定することができますか?

さらに、どのように/どこで Android ソース コード で、計測した幅/高さを使って描画幅/高さを計算しているのでしょうか?を調べてみたのですが ソースコードを見る を調べてみましたが、測定された幅/高さが最終的な幅/高さの計算にどのように使用されるのかがわかりません。多分、パディングと関係があるのでしょうが、よくわかりません。

どのように解決するのですか?

measuredWidth/heightはその名の通り、測定とレイアウトの段階で使用されます。

例を挙げてみましょう。

ウィジェットは、200px × 200px の大きさにしたいと言いました。これはmeasureedWidth/heightです。

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

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

私は、onLayoutメソッドの外側でmeasureedWidth/heightを使用しないことをお勧めします。

をまとめると.

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

さらに

public void View.layout(int l, int t, int r, int b)

は、位置とサイズの割り当てが行われる場所であるようです。