이 문제를 해결하는 방법은 자식 뷰에 대한 사용자 지정 뷰를 만든 다음 사용자 지정 뷰에 대해 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()는 같은 방식으로 수행됩니다.
당신이 무슨 뜻 이죠 하드 읽어? 서식? 정확히 무엇? –
나만 있을지 모르지만, "new LinearLayout .LayoutParams"에 대한 여러 줄은 아마 2 또는 3을 사용할 때 5 줄을 차지합니다. – JPM
당신은 당신 자신의 대답을 받아 들일 수 있습니다. – Buffalo