想象一个完整的 Android 设备屏幕,我希望它分为两个部分:
- 上半部分包含文本,该文本可能大于可用空间(或不大于可用空间),因此文本将滚动(即 ScrollView 内的 TextView)
- 下半部分包含一个 MapView 控件。
具体看一些场景:
- 如果文本很小,我希望地图占据更多空间,即超过 50%。所以也许 20% 是文字,80% 是地图。
- 如果文本较大,则最多仅占用屏幕空间的 50%,然后滚动。所以 50% 是地图,50% 是文字。
目前,我已经为这两个部分分配了权重,这还不错,但如果文本很小,地图就不会扩展以占据空间,并且布局会浪费地图可能会出现的间隙有用地使用。
我已经尝试了很多组合,但不知道如何实现这一点。我知道自己想要什么,但不知道如何获得可用的视图来交付它,这对我来说似乎是一种常见的经历。我希望有一种简单的方法可以做到这一点。
请随意让我看起来像个傻瓜,并指出我错过的明显属性:-)
=================================================== ===================
据我所知,仅在声明性 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();
}
}
您可以通过将所有内容放入 LinearLayout 并更改以下参数来实现:
- 线性布局的权重总和 http://developer.android.com/reference/android/widget/LinearLayout.html#setWeightSum%28float%29
- 儿童体重 http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)