[android] Android SDK에서 getWidth / Height ()와 getMeasuredWidth / Height ()의 차이점은 무엇입니까?

안드로이드 문서는 말한다 뷰의 두 가지 크기가 있다는 것을 측정 치수도면 치수 . 측정 된 치수는 측정 패스 ( onMeasure 메서드) 에서 계산 된 치수이고 드로잉 치수 는 화면의 실제 크기입니다. 특히 문서는 다음과 같이 말합니다.

이러한 값은 측정 된 너비 및 높이와 다를 수 있지만 반드시 그럴 필요는 없습니다.

그래서, 제 질문은 : 드로잉 치수가 측정 치수와 다를 수 있습니까? 는 IF 된 onMeasure (INT, INT) 방법면 매개 변수로 주어진 레이아웃 요구 사항 ( widthMeasureSpecheightMeasureSpec는 , SDK가 결정하는 방법 할 수 뷰는 다른 도면의 크기를 가져야한다고?

또한 Android 소스 코드 에서 측정 된 너비 / 높이를 사용하여 드로잉 너비 / 높이를 계산하는 방법 / 위치는 무엇입니까? View source code 를 살펴 보려고 했지만 measureWidth / Height를 사용하여 최종 너비 / 높이를 계산하는 방법을 알 수 없습니다. 패딩과 관련이 있을지 모르지만 확실하지 않습니다.



답변

이름에서 알 수 있듯이 measureWidth / height는 측정 및 레이아웃 단계에서 사용됩니다.

예를 들어 보겠습니다.

위젯은 자체 측정을 ​​요청받으며, 위젯은 200px x 200px를 원한다고 말합니다. 이것은 측정 된 너비 / 높이입니다.

레이아웃 단계, 즉 onLayout 메소드에서. 메서드는 자식의 측정 된 너비 / 높이를 사용하거나 뷰의 레이아웃 메서드를 호출하여 새로운 너비 / 높이를 할당 할 수 있습니다.

onLayout 메서드가 childview.layout (0,0,150,150)을 호출한다고 가정하겠습니다. 이제 뷰의 너비 / 높이가 측정 된 너비 / 높이와 다릅니다.

onLayout 메서드 외부에서 MeasuringWidth / height를 사용하지 않는 것이 좋습니다.

요약 .

  1. onMeasure-> MeasureWidth / measuredHeight 설정
  2. onLayout-> 위젯의 너비 / 높이를 설정합니다.

또한
public void View.layout(int l, int t, int r, int b)
위치와 크기가 할당되는 장소 인 것 같습니다.


답변