ConstraintLayout中TextView挤压下方视图且布局居中问题求助
解决TextView内容过长挤走下方视图的问题
嘿,这个场景我之前做项目的时候也遇到过,其实关键就是用对ConstraintLayout的约束属性,同时调整一下链式约束的参数就行,给你几个可行的方案:
方案1:约束链+顶部偏移修正居中问题
你之前用链式约束导致居中,是因为没设置链的样式和偏移参数。可以这么调整:
- 选中Body和More两个视图,右键→Chains→Create Vertical Chain,把它们组成垂直约束链
- 给链设置
app:layout_constraintVertical_chainStyle="packed",让两个视图紧凑排列 - 再给链加上
app:layout_constraintVertical_bias="0.0",这样整个链就会顶部对齐,不会再居中 - 给Body添加滚动属性:
android:scrollbars="vertical",同时在代码里补充滚动逻辑:bodyTextView.setMovementMethod(new ScrollingMovementMethod());,这样Body内容过长时会内部滚动,不会把More挤出去
方案2:用constrainedHeight属性限制Body高度
如果不想用链式约束,也可以单独给Body加约束限制:
- 给Body设置:
- 顶部约束到父布局顶部
- 底部约束到More的顶部
- 加上
app:layout_constrainedHeight="true",这个属性会让Body的wrap_content高度被约束限制,不会无限延伸挤占空间
- 给More设置顶部约束到Body底部,若需要More固定在屏幕下方,可以额外给它加底部约束到父布局底部
- 同样给Body加上滚动属性和代码逻辑,让过长内容在内部滚动
注意点
- 保持Body的高度为
wrap_content,不要设固定高度,才能自适应内容长度 - 如果当前布局不是ConstraintLayout,建议切换成它,它的约束逻辑更灵活,能解决大部分布局适配问题
这样调整后,Body内容短的时候More会紧跟下方;Body内容长到快占满屏幕时,Body会停止延伸并出现滚动条,More会稳稳留在屏幕内,完全符合你要的顶部对齐效果~
内容的提问来源于stack exchange,提问作者Maneki Neko
相关产品推荐
相关产品推荐

