想象一下一个完整的Android设备屏幕,我想把它分成两个部分:
具体来看一些场景:
目前,我已经为这两个部分分配了权重,这并不是太糟糕,但如果文本很小,地图就不会展开以占据空间,并且布局有一个浪费的间隙,地图可以有用地使用它。
我已经尝试了很多组合,但不知道如何实现。对我来说,这似乎是一种常见的经验,我知道我想要什么,但不知道如何获得可用的视图来交付它。我希望有一个很好的简单的方法来做到这一点。
请随时让我看起来像个傻子,并指出我遗漏的明显属性:-)
======================================================================
据我所知,只有在声明性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();
}
}
发布于 2010-12-01 00:05:07
您是否尝试在运行时测量屏幕高度:
Display display = ((WindowManager)
getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getHeight();
然后,将顶部视图max_height设置为width*0.5,将min_height设置为width*0.2。您的顶部视图必须是具有min_height和max_height属性的控件(如TextView)。另外,将layout_weight设置为0或将其保留为空。在底部视图中,将布局权重设置为1。
发布于 2010-12-01 00:48:48
您可以通过将所有内容放入LinearLayout并更改以下参数来完成此操作:
发布于 2012-09-19 23:42:32
在XML中,实现50/50的最简单方法是使用LinearLayout权重。基本上,将两个视图放入单个LinearLayout中将两个子视图上的android:layout_weight设置为相同的值,如将两者都设置为.5、1或42。然后将layout_width设置为0px或fill_parent/match_parent。
较小的部分变得更加复杂。幸运的是,您可以在Java中关闭称重。一种方法是等待窗口绘制完成(如果它们是预先填充的),然后对它们进行测量。这是可以做的,我想它叫做onWindowFocusChanged。
https://stackoverflow.com/questions/4315332
复制相似问题