Androidデバイスの全画面を想像してみてください。2つのセクションに分割したいと思います。
- 上半分にはテキストが含まれていますが、これは使用可能なスペースよりも大きい(またはない)可能性があるため、テキストはスクロールします(つまり、ScrollView内のTextView)
- 下半分にはMapViewコントロールが含まれています。
いくつかのシナリオを具体的に見てみましょう。
- テキストが小さい場合は、マップがより多くのスペース、つまり50%以上を占めるようにします。つまり、おそらく20%のテキスト、80%のマップです。
- テキストが大きい場合は、画面スペースの最大50%しか占めず、スクロールします。つまり、50%の地図、50%のテキストです。
現時点では、2つの部分に重みを割り当てていますが、それはそれほど悪くはありませんが、テキストが小さい場合、マップはスペースを取るために拡張されず、レイアウトにはマップが可能な無駄なギャップがあります。便利に使用します。
たくさんの組み合わせを試しましたが、これを実現する方法がわかりません。自分が何を望んでいるのかはわかっているのですが、それを実現するために利用可能なビューを取得する方法がわかりません。私はこれを行うための素晴らしい簡単な方法があることを望んでいます。
私をばかみたいに見せて、私が見逃した明らかな属性を指摘してください:-)
================================================== ====================
私が見る限り、これを宣言型XMLだけで行う方法はなく、コードで行う必要があります。テキストセクションの高さをwrap_contentに設定し、重みを0(サイズ変更なし)に設定し、マップを重み= 1に設定します(つまり、残りのスペースを占有します)。次に、(ScrollView内の)テキストセクションがスペースを占有しすぎていないかどうかを確認し、占有している場合は縮小します。このコードは、異なるレイアウト方向をサポートするように変更する必要があります。
private void fixLayoutProportions()
{
float maxPercentageOfScreenForText = 50/100;
LinearLayout container = (LinearLayout)findViewById(R.id.container);
ScrollView eventText = (ScrollView)findViewById(R.id.text_scroller);
int heightAvailable = container.getHeight();
int scrollerHeight = eventText.getHeight();
if ( scrollerHeight>(heightAvailable*maxPercentageOfScreenForText) ) // Text section using too much space
{
eventText.getLayoutParams().height = (int)(heightAvailable*maxPercentageOfScreenForText) ;
eventText.invalidate();
}
}