본문 바로가기

Android

measure getMode getSize

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]

'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