首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android中创建两个视图,每个视图使用50%的高度,除非其中一个更小?

如何在Android中创建两个视图,每个视图使用50%的高度,除非其中一个更小?
EN

Stack Overflow用户
提问于 2010-11-30 23:24:57
回答 7查看 14.9K关注 0票数 19

想象一下一个完整的Android设备屏幕,我想把它分成两个部分:

  1. 上半部分包含文本,可能大于可用空间(也可能没有),因此文本将滚动(即,ScrollView)
  2. The下半部分内的MapView包含MapView控件。

具体来看一些场景:

  1. 如果文本很小,我希望地图占用更多空间,即超过50%。所以可能是20%的文本,80%的地图。
  2. 如果文本更大,它只占用最多50%的屏幕空间,然后滚动。所以50%的地图,50%的文本。

目前,我已经为这两个部分分配了权重,这并不是太糟糕,但如果文本很小,地图就不会展开以占据空间,并且布局有一个浪费的间隙,地图可以有用地使用它。

我已经尝试了很多组合,但不知道如何实现。对我来说,这似乎是一种常见的经验,我知道我想要什么,但不知道如何获得可用的视图来交付它。我希望有一个很好的简单的方法来做到这一点。

请随时让我看起来像个傻子,并指出我遗漏的明显属性:-)

======================================================================

据我所知,只有在声明性XML中才能做到这一点,需要在代码中做到这一点。我将文本部分的高度设置为wrap_content,权重设置为0(不调整大小),并将地图设置为weight=1 (即占用剩余空间)。然后,我检查文本部分(在ScrollView中)是否占用了太多空间,如果是,则将其缩小。这段代码需要修改以支持不同的布局方向。

代码语言:javascript
复制
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();
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-01 00:05:07

您是否尝试在运行时测量屏幕高度:

代码语言:javascript
复制
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。

票数 3
EN

Stack Overflow用户

发布于 2010-12-01 00:48:48

您可以通过将所有内容放入LinearLayout并更改以下参数来完成此操作:

票数 11
EN

Stack Overflow用户

发布于 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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4315332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档