본문 바로가기

Android

[Android] onMeasure 함수의 인자들

CustomView에서 onMeasure 사용..

onMeasure 함수는 View의 크기 계산하는 함수라 할 수 있을거 같습니다. 함수 내에서 setMeasuredDimension(width, height)를 호출하면서 정확한(계산된) 크기를 정하게 되죠.

...
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        ...
        ...
        setMeasuredDimension(widthSize, heightSize);
    }
...

다음 코드는 보편적으로 쓰이는 형태입니다. 매개변수로 받은 widthMeasureSpec, heightMeasureSpec에서 Mode와 Size를 뽑아내는 모습입니다.

32bit인 Int형 안에 Mode와 Size를 함께 담고 있습니다. 32bit 중 맨 앞 2bit를 Mode로 나머지 30bit를 Size로 사용합니다.

https://developer.android.com/reference/android/view/View.MeasureSpec.html#AT_MOST

 

View.MeasureSpec  |  Android 개발자  |  Android Developers

View.MeasureSpec public static class View.MeasureSpec extends Object java.lang.Object    ↳ android.view.View.MeasureSpec A MeasureSpec encapsulates the layout requirements passed from parent to child. Each MeasureSpec represents a requirement for either th

developer.android.com

  • MeasureSpec.AT_MOST : 0x80000000

  • MeasureSpec.EXACTLY : 0x40000000

  • MeasureSpec.UNSPECIFIED : 0x0000000

AT_MOST는 WRAP_PARENT, EXACTLY는 MATCH_PARENT와 정확한 수치가 LayoutParam일 때 Mode로 사용합니다.

 

참고 사이트

http://i5on9i.blogspot.com/2013/05/android-view-onmeasure-onlayout.html

 

[컴][안드로이드] Android 의 View 에서 onMeasure 와 onLayout 의 의미

android view 에서 onMeasure / onLayout 작성하는 방법 , onMeasure , onLayout, how to write / custome layout 에서 onMeasure 와 onLayout 에 어떤 코드를 넣어야 하는가....

i5on9i.blogspot.com