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

Oll*_*e C 19 height android screen-size

想象一下完整的Android设备屏幕,我希望它分为两部分:

  1. 上半部分有文本,可能比可用空间大(或没有),因此文本将滚动(即ScrollView内的TextView)
  2. 下半部分包含一个MapView控件.

具体看一些场景:

  1. 如果文字很小,我希望地图占用更多空间,即超过50%.所以也许20%的文字,80%的地图.
  2. 如果文本较大,则只占屏幕空间的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Dam*_*ski 11

您可以将所有内容放入LinearLayout并更改以下参数:


bob*_*tko 3

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

Display display = ((WindowManager) 
      getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = display.getHeight();
Run Code Online (Sandbox Code Playgroud)

然后,将顶视图 max_height 设置为 width*0.5,将 min_height 设置为 width*0.2。您的顶视图必须是具有 min_height 和 max_height 属性的控件(如 TextView)。另外,将layout_weight 设置为0 或留空。在底部视图中将布局权重设置为 1。