通常、getMeasuredHeight()とgetHeight()、またはgetMeasuredWidth()とgetWidth()を使用して取得される値は同じです。
- getMeasuredHeight() と getMeasuredWidth() で取得される値は、カスタム コントロールが onMeasure(int widthMeasureSpec, int heightMeasureSpec) メソッドをオーバーライドするときに setMeasuredDimension(int MeasurementWidth, int MeasurementHeight) を呼び出して設定された値です。ここではメソッドは呼び出されず、super.onMeasure(widthMeasureSpec, widthMeasureSpec) を直接呼び出します。getMeasuredHeight() と getMeasuredWidth() を使用して取得する値は両方とも 0 です。
- getHeight() と getWidth() によって取得される値は、onLayout() メソッドを呼び出すときに渡される 4 つのパラメーターです。
要約する
①getMeasuredWidthメソッドで取得した値はsetMeasuredDimensionメソッドで設定した値であり、その値はmeasureメソッド実行後に決定されます。
②getWidthメソッドは、layoutメソッドで渡される4つのパラメータのうちmRight-mLeftを取得し、その値はlayoutメソッド実行後に決定されます。
③ 通常、onLayout メソッド内では getMeasuredWidth メソッドを使用し、onLayout メソッド以外では getWidth メソッドを使用します。
実際のテストケースについては、https: //blog.csdn.net/dmk877/article/details/49734869を参照してください。