2011-09-14 5 views
3

この問題を解決する方法は、子ビューのカスタムビューを作成し、次にカスタムビューのonMeasure()をオーバーライドすることです。新しいonMeasure()は、幅と高さをできるだけ大きく設定します。Horizo​​ntalScrollViewの子をスクリーンと同じ大きさにしますか?

ソフトキーボードを表示すると、問題が発生します。オリエンテーションの変更とキーボードの表示では、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

関連する問題