想象一个完整的 Android 设备屏幕,我希望它分为两个部分:
- 上半部分有文本,可能大于可用空间(或不可用),因此文本将滚动(即 ScrollView 内的 TextView)
- 下半部分包含一个 MapView 控件。
具体看一些场景:
- 如果文本很小,我希望地图占用更多空间,即超过 50%。所以也许 20% 的文字,80% 的地图。
- 如果文本较大,则最多只占用 50% 的屏幕空间,然后滚动。所以 50% 的地图,50% 的文字。
目前我已经为这两个部分分配了权重,这还不错,但是如果文本很小,则地图不会扩展以占用空间,并且布局会浪费地图可以有用的使用。
我已经尝试了很多组合,但不知道如何实现这一点。对我来说,我知道自己想要什么似乎是一种常见的体验,但看不到如何获得可用的视图来交付它。我希望有一个很好的简单方法来做到这一点。
请随意让我看起来像个傻瓜,并指出我错过的明显属性:-)
==================================================== =====================
据我所知,仅在声明性 XML 中无法做到这一点,它需要在代码中完成。我将文本部分的高度设置为 wrap_content,将权重设置为 0(不调整大小),并将地图设置为 weight=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();
}
}