onMeasure는 integer 형태를 가지고 있고 이는 효율성을 위한 것이다.
해당 정보에 데이터를 사용하기 위해서는 getMode, getSize 를 이용해 이를 디코드할 필요가 있다.
[code]
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
[/code]
mode
AT_MOST : 컨트롤이 사용할 수 잇는 최대 공간
EXACTLY : 컨트롤의 정확한 크기
UNSPECIFIED : 참조할 값이 없다.
[code]
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int meaH = measureCalc(heightMeasureSpec);
int meaW = measureCalc(widthMeasureSpec);
setMeasuredDimension(meaH, meaW);
}
private int measureCalc(int meaSpec) {
int mode = MeasureSpec.getMode(meaSpec);
int size = MeasureSpec.getSize(meaSpec);
int res = 500;
int (mode == MeasureSpec.AT_MOST) {
res = size;
// 최대 크기 내에서
// 컨트롤의 이상적인 크기를 계산 해준다.
// 컨트롤 크기가 커서 영역을 벗어 난다면
// 최대 크기를 반환해준다.
} else if (mode == MeasureSpec.EXACTLY) {
res = size;
// 컨트롤이 이 경계 안에 정확히 맞을 수 있으면 그 값을 반환
}
return res;
}
[/code]
해당 정보에 데이터를 사용하기 위해서는 getMode, getSize 를 이용해 이를 디코드할 필요가 있다.
[code]
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
[/code]
mode
AT_MOST : 컨트롤이 사용할 수 잇는 최대 공간
EXACTLY : 컨트롤의 정확한 크기
UNSPECIFIED : 참조할 값이 없다.
[code]
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int meaH = measureCalc(heightMeasureSpec);
int meaW = measureCalc(widthMeasureSpec);
setMeasuredDimension(meaH, meaW);
}
private int measureCalc(int meaSpec) {
int mode = MeasureSpec.getMode(meaSpec);
int size = MeasureSpec.getSize(meaSpec);
int res = 500;
int (mode == MeasureSpec.AT_MOST) {
res = size;
// 최대 크기 내에서
// 컨트롤의 이상적인 크기를 계산 해준다.
// 컨트롤 크기가 커서 영역을 벗어 난다면
// 최대 크기를 반환해준다.
} else if (mode == MeasureSpec.EXACTLY) {
res = size;
// 컨트롤이 이 경계 안에 정확히 맞을 수 있으면 그 값을 반환
}
return res;
}
[/code]
'Android' 카테고리의 다른 글
todo list item view (0) | 2013.10.08 |
---|---|
wrox professional android 2 application development source code (0) | 2013.10.08 |
webkit and android (0) | 2013.10.08 |
facebook util (0) | 2013.10.08 |
corona library (0) | 2013.10.08 |