【发布时间】:2016-04-29 17:21:13
【问题描述】:
我的布局大致如下:
<RelativeLayout>
<TextView
layout_width="match_parent"
layout_height="50dp"
layout_alignParentTop="true"
id="@+/A"/>
<TextView
layout_width="match_parent"
layout_height="46dp"
layout_alignParentBottom="true"
id="@+/B"/>
<CustomView
layout_width="wrap_content"
layout_height="wrap_content"
layout_below="@id/A"
layout_above="@id/B"
layout_centerHorizontal="true"/>
</RelativeLayout>
目的是 A 和 B 应该以固定的高度在顶部和底部,并且 CustomView 应该尽可能多地占用剩余空间,因为它可以受到其纵横比的限制。 (注意我不能使用LinearLayout,因为我省略了一些其他的孩子)
以下是特定屏幕尺寸的情况:
- CustomView.onMeasure 使用 (AT_MOST 776, AT_MOST 395) 调用
- CustomView 调用 setMeasuredDimension(285, 391)
- CustomView.onMeasure 再次调用 (EXACTLY 285, EXACTLY 251)
- CustomView 调用 setMeasuredDimension(参数似乎无关紧要)
- CustomView.onLayout 调用尺寸为 285 x 251
我猜顶部和底部约束强制高度为251,但为什么RelativeLayout 不给CustomView 一个机会根据这个高度约束选择宽度?假设如果一个孩子可以是 285x391,那么它也可以是 285x251,这似乎是不正确的行为。是否有解决方法(除了用另一个自定义视图替换 RelativeLayout)?
我使用 minSdkVersion=14 和 targetSdkVersion=21,以防万一。
【问题讨论】: