ConstraintLayout 高度错误。约束布局高度错误。当ConstraintLayout互相嵌套时,高度从撑满变成自适应

ConstraintLayout 约束布局嵌套约束布局时,高度又计算错误了。

错误情况如下:图中红色框部分是约束布局,紫色区域是设置了高度为 match_parent 的 View,但实际运行效果是 warp_content。当我把内部的约束布局换成非约束布局时(图2),效果正常了。

ConstraintLayout 高度错误。约束布局高度错误。当ConstraintLayout互相嵌套时,高度从撑满变成自适应_第1张图片 ConstraintLayout 高度错误。约束布局高度错误。当ConstraintLayout互相嵌套时,高度从撑满变成自适应_第2张图片

我以前也发现过这个问题,但解决办法只是嵌套时不使用 ConstraintLayout ,这个方案一点都不懒人。

以前的帖子:https://blog.csdn.net/qq_34224268/article/details/81171366

这次发现一个新的方案:

新方案:当约束布局内部的 View 同时设置了这两个属性: topToTop = parent;bottomToBottom = parent;时,约束布局嵌套可滚动的View,内部 View 的高度就可能会错误,给这个内部 View 设置 marginTop =1px 或 marginBottom = 1px 时,高度就能正确排版。

由来:

偶然间我经过比较发现,当约束布局内部的 View 同时设置了这两个属性: topToTop = parent;bottomToBottom = parent;时,约束布局参与嵌套,内部 View 的高度就可能会错误。而另一几乎相同的布局,只是把 topToTop = parent 改成了 topToBottom = topView 高度就正常。这里的topView是一个 topToTop = parent 的View。同理,把 bottomToBottom = parent 改成 bottomToTop = bottomView 高度也能正常。经过进一步测试 topView 或 bottomView 必须参与排版,即它的高度至少是 1px,不能 gone 隐藏掉,也无法通过其它方式让 内部 View 的顶底对齐ConstraintLayout,一旦对齐内容View 高度就出错。于是我猜想这个错误和 top、bottom 的位置有关,我尝试添加 marginBottom = 1px,发现高度正常,就肯定了我的猜想。

你可能感兴趣的:(Android)