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
-
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' 카테고리의 다른 글
[Android] View의 getLeft, getTop, getRight, getBottom 메서드 (0) | 2020.02.14 |
---|---|
[Android] 앱 Background로 보내기 (0) | 2020.02.07 |
[Android] EditText가 아닌 다른 곳 클릭시 키보드 내리기 (0) | 2020.02.02 |
[Android] Activity Stack, Task 확인하기 (0) | 2020.01.31 |
[Android] Task와 Task Affinity에 대한 나의 이해 (0) | 2020.01.29 |