티스토리 뷰

Mobile/Android

[Android]MeasureSpec

out of coding 2015. 3. 27. 18:59

안드로이드 뷰의 크기관련하여서, onMeasure에서나, 외부에서 그려지기 전에 크기를 구할 경우에, MeasureSpec를 사용합니다.


MeasureSpec의 의미입니다.


MeasureSpec.AT_MOST : wrap_content (뷰 내부의 크기에 따라서 달라짐)

MeasureSpec.EXACTLY : match_parent (외부에서 이미 크기가 정하여져 있음)

MeasureSpec.UNSPECIFIED : MODE가 셋팅되지 않은 크기가 넘어올때 (거의 없음.)


Custom View의 onMeasure는 다음과 같이 구성하면 되며, AT_MOST일경우 원하는 크기를 지정해서 넣어주면 되겠지요.

자신이 만든 뷰의 일반적인 크기등...


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        
        // height 진짜 크기 구하기
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize = 0;
        switch(heightMode) {
        case MeasureSpec.UNSPECIFIED:    // mode 가 셋팅되지 않은 크기가 넘어올때
            heightSize = heightMeasureSpec;
            break;
        case MeasureSpec.AT_MOST:        // wrap_content (뷰 내부의 크기에 따라 크기가 달라짐)
            heightSize = 20;
            break;
        case MeasureSpec.EXACTLY:        // fill_parent, match_parent (외부에서 이미 크기가 지정되었음)
            heightSize = MeasureSpec.getSize(heightMeasureSpec);
            break;
        }
        
        // width 진짜 크기 구하기
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize = 0;
        switch(widthMode) {
        case MeasureSpec.UNSPECIFIED:    // mode 가 셋팅되지 않은 크기가 넘어올때
            widthSize = widthMeasureSpec;
            break;
        case MeasureSpec.AT_MOST:        // wrap_content (뷰 내부의 크기에 따라 크기가 달라짐)
            widthSize = 100;
            break;
        case MeasureSpec.EXACTLY:        // fill_parent, match_parent (외부에서 이미 크기가 지정되었음)
            widthSize = MeasureSpec.getSize(widthMeasureSpec);
            break;
        }
        
        setMeasuredDimension(widthSize, heightSize);
    }

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함