この問題を解決する方法は、子ビューのカスタムビューを作成し、次にカスタムビューの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