约束布局ConstrainLayout

转载自简书
约束布局ConstrainLayout是一个ViewGroup,为了解决布局嵌套过多的翁田,以灵活的方式定位和调整小部件。

对比RelativeLayout来说,ConstrainLayout更灵活,性能更出色,ConstraintLayout可以按照比例约束控件位置和尺寸,能更好地适配屏幕大小不同的机型。

https://www.jianshu.com/p/17ec9bd6ca8a

1. 添加依赖
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
2. 相对定位
方法解释
app:layout_constraintLeft_toRightOf="@+id/A"把B左边约束到A的右边
app:layout_constraintTop_toBottomOf="@+id/A"把B的上面约束到A的下面
layout_constraintBaseline_toBaselineOfBaseline文本基线对齐
3. 角度定位
方法解释
app:layout_constraintCircleAngle="120"B的中心在A的中心120度
app:layout_constraintCircleRadius="150dp"距离为150dp
4. 边距
在ConstraintLayout中实现margin,必须约束盖控件在ConstraintLyout里的位置

goneMargin:主要用于约束的控件可见性被设置为gone的时候使用的margin值

5. 居中和偏移
RelativeLayoutConstraintLayout
layout_centerlnParent=tureapp:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"

意思是把控件上下左右约束在布局的上下左右。

同理:RelativeLayout中的水平居中layout_centerHorizontal相当于在ConstraintLayout约束控件的左右为parent的左右;RelativeLayout中的垂直居中layout_centerVertical相当于在ConstraintLayout约束控件的上下为parent的上下。

  • 尺寸约束

控件的尺寸可以通过四种不同方式指定

​ 1.使用指定的尺寸

​ 2.使用(wrap_content),让控件自己计算大小

当控件的高度或宽度为wrap_content时,可以使用下列属性来控制最大、最小的高度或宽度:
android:minWidth 最小的宽度
android:minHeight 最小的高度
android:maxWidth 最大的宽度
android:maxHeight 最大的高度
注意!当ConstraintLayout为1.1版本以下时,使用这些属性需要加上强制约束,如下所示:
app:constrainedWidth=”true”
app:constrainedHeight=”true”

​ 3.使用0dp(match_constraint) :官方不推荐使用match_parent

​ 4.宽高比

当宽或高至少有一个尺寸被设置为0dp时,可以通过属性layout_constraintDimensionRatio来设置宽高比

app:layout_constraintDimensionRatio="1:1"

除此之外,在设置宽高比的值的时候,还可以在前面加W或H,分别指定宽度或高度限制。 例如:
app:layout_constraintDimensionRatio="H,2:3"指的是 高:宽=2:3
app:layout_constraintDimensionRatio="W,2:3"指的是 宽:高=2:3

6. 链

两个或以上的控件通过一条链约束在一起(横向/纵向)

两端控件分别月parent约束

一条链的第一个控件时这条链的链头

改变整条链的样式: layout_constraintHorizontal_chainStyle

方法名中文含义
CHAIN_SPREAD(默认) 展开元素
CHAIN_SPREAD_INSIDE展开元素,但链的两端贴近parent
CHAIN_PACKED链的元素将被打包在一起
将控件的宽度设置为0dp,则可以在每个TextView中设置横向权重

layout_constraintHorizontal_weight(constraintVertical为纵向)来创建一个权重链

7. 辅助工具
  • Optimizer

当我们使用 MATCH_CONSTRAINT 时,ConstraintLayout 将对控件进行 2 次测量,ConstraintLayout在1.1中可以通过设置 layout_optimizationLevel 进行优化,可设置的值有:
none:无优化
standard:仅优化直接约束和屏障约束(默认)
direct:优化直接约束
barrier:优化屏障约束
chain:优化链约束
dimensions:优化尺寸测量

  • Barrier
多控件情况下,Barrier可以在一侧建立屏障app:barrierDirection为屏障所在的位置,可设置的值有:bottom、end、left、right、start、top
app:constraint_referenced_ids为屏障引用的控件,可设置多个(用“,”隔开)
  • Group

将多个控件归为一组,方便隐藏和显示一组控件

app:constraint_referenced_ids="TextView1,TextView3"

  • Placeholder
占位符,可使用setContent()设置另一个控件的id,使这个控件移动到占位符的位置。
  • Guideline

    Guildline像辅助线一样,在预览的时候帮助你完成布局(不会显示在界面上)。
    Guildline的主要属性:
    android:orientation 垂直vertical,水平horizontal
    layout_constraintGuide_begin 开始位置
    layout_constraintGuide_end 结束位置
    layout_constraintGuide_percent 距离顶部的百分比(orientation = horizontal时则为距离左边)

Android新特性介绍,ConstraintLayout完全解析,可视化

https://blog.csdn.net/guolin_blog/article/details/53122387

最后修改:2022 年 07 月 05 日
如果觉得我的文章对你有用,请随意赞赏