2010-04-27 5 views
0

Activity에 2 부분으로 구성된 사용자 지정보기가 표시됩니다. 한 부분을 화면 높이의 1/3로, 다른 부분을 2/3로하고 싶습니다.보기가 포함 된 크기를 올바르게 조정하는 방법

onMeasure()을 무시하고 디스플레이 측정 값을 사용하여 디스플레이 높이를 찾을 수 있지만 배터리 막대 또는보기 제목 크기는 고려하지 않습니다.

DisplayMetrics dm = new DisplayMetrics(); 
((WindowManager)contxt.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); 
int height = dm.heightPixels; 

표시 가능 영역의 높이를 어떻게 알 수 있습니까? 나는 layout 등을 무효화 할 준비가되어 있습니다. Android의 모범 사례는 무엇입니까? 나는이 라인에서 다른 질문을 보았지만 결정적이지는 않다.

답변

1

나는 그것을 할 길을 찾았습니다. RelativeLayout을 오버라이드하고 상위 뷰와 하위 뷰에 대한 포인터를 유지하도록합니다. 그런 다음 onMeasure를 처리하면 내 조회수에 원하는 높이가 설정됩니다. 그들은 onMeasure를 처리 할 때 원하는 높이를 사용합니다. 이것은 내가 볼 수있는 영역의 2/3에서 하나의 뷰를 제공하고 다른 뷰는 아래에서 볼 수 있습니다.

- 내 레이아웃 클래스

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    // set default screen heights 
    int heightSize = MeasureSpec.getSize(heightMeasureSpec); 
    if (upper != null) 
     upper.setPrefHeight((heightSize*2)/3); 
    if (lower != null) 
     lower.setPrefHeight(heightSize/3); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

} 

에서 -보기에서 파생 된 클래스

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(measureWidth(widthMeasureSpec), 
      measureHeight(heightMeasureSpec)); 
} 

/** 
* Determines the width of this view 
* @param measureSpec A measureSpec packed into an int 
* @return The width of the view, honoring constraints from measureSpec 
*/ 
private int measureWidth(int measureSpec) { 
    int result = 0; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     DisplayMetrics dm = new DisplayMetrics(); 
     ((WindowManager)contxt.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); 
     result = dm.widthPixels; 
    } 
    width = result; 
    return result; 
} 

/** 
* Determines the height of this view 
* @param measureSpec A measureSpec packed into an int 
* @return The height of the view, honoring constraints from measureSpec 
*/ 
private int measureHeight(int measureSpec) { 
    int result = 0; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     result = prefHeight; 
    } 
    height = result; 

    return result; 
} 
관련 문제