androidx.constraintlayout:2.1.0版本ImageView布局错位问题咨询
问题原因
这不是ConstraintLayout 2.1.0的BUG,是布局配置的约束逻辑问题,核心原因如下:
ImageView默认没有内置的**文本基线(Baseline)**属性,你给second_row_image_view同时设置了两个冲突的垂直方向约束:- 顶部约束:
app:layout_constraintTop_toBottomOf="@id/barrier_first_row" - 基线约束:
app:layout_constraintBaseline_toBaselineOf="@id/second_row_text_view"
ConstraintLayout无法解析无基线控件的基线约束,导致约束规则失效,控件位置计算错误出现悬浮错位。
- 顶部约束:
- 替换为EditText后布局正常,是因为EditText属于文本类控件,天生携带基线属性,基线约束可以正常生效,不会出现约束解析失败的问题。
修复方案
删除second_row_image_view的基线约束属性,改用垂直对齐规则即可,修改后的代码如下:
<ImageView android:id="@+id/second_row_image_view" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintEnd_toStartOf="@id/second_row_switch" app:layout_constraintStart_toEndOf="@id/barrier_left_right" app:layout_constraintTop_toTopOf="@id/second_row_text_view" app:layout_constraintBottom_toBottomOf="@id/second_row_text_view"/>
如果需要和文本控件保持基线对齐的视觉效果,也可以给ImageView添加android:baselineAlignBottom="true"属性开启基线对齐能力,保留原有基线约束即可正常工作。
内容的提问来源于stack exchange,提问作者stackbiz
相关产品推荐
相关产品推荐

