2011-09-14 2 views
3

이 문제를 해결하는 방법은 자식 뷰에 대한 사용자 지정 뷰를 만든 다음 사용자 지정 뷰에 대해 onMeasure()를 재정의하는 것입니다. 새로운 onMeasure()는 폭과 높이를 가능한 한 크게 설정합니다.HorizontalScrollView의 자식을 화면만큼 크게 만드시겠습니까?

소프트 키보드 을 돌릴 때 문제가 발생합니다. 오리엔테이션 변경 및 키보드 표시에서 onMeasure()는 "가장 큰"사용 가능한 높이를 무언가 작게 설정하므로 키보드를 숨기면 자식 뷰의 크기가 잘못 표시됩니다.

키보드가 사라지면 레이아웃을 다시 계산하는 방법이 있습니까? 아니면 내가 잘못하고있는 것인가? 코드는 다음과 같습니다.

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ 

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 
    setMeasuredDimension(measureWidth(widthMeasureSpec), 
         measureHeight(heightMeasureSpec)); 

    setLayoutParams(new LinearLayout.LayoutParams(
      measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)) 
    ); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

public int measureWidth(int measureSpec) { 
    int result = 0; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 
    Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int screenWidth = display.getWidth(); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     // Measure the view 
     result = screenWidth; 
     if (specMode == MeasureSpec.AT_MOST) { 
      // Respect AT_MOST value if that was what is called for by measureSpec 
      result = Math.min(result, specSize); 
     } 
    } 
    Log.d(TAG, "Width: "+String.valueOf(result)); 

    return result; 
} 

measureHeight()는 같은 방식으로 수행됩니다.

+0

당신이 무슨 뜻 이죠 하드 읽어? 서식? 정확히 무엇? –

+0

나만 있을지 모르지만, "new LinearLayout .LayoutParams"에 대한 여러 줄은 아마 2 또는 3을 사용할 때 5 줄을 차지합니다. – JPM

+0

당신은 당신 자신의 대답을 받아 들일 수 있습니다. – Buffalo

답변

0

귀하의 super.onMeasure (widthMeasureSpec, heightMeasureSpec)는 값 전달 나는 당신이 실제 측정 된 너비와 높이가되고 싶어요 것입니다 생각합니다 :

super.onMeasure(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); 
+0

그래, 그랬어. 하위 뷰는 현재 올바른 너비가 아니지만 레이아웃 크기를 잘못 설정했기 때문일 수 있습니다. –

+0

나머지 부분과 함께 행운을 빌어 서 도와 줘서 기쁩니다. – JPM

+0

@UAvalos이 답변의 내용을 업데이트 한 후 이미지가 화면보다 커졌습니다. 어떻게 수정했는지 말씀해 주시겠습니까? 나는 정말로 그것을 바르게 평가할 것이다! – Omar

관련 문제