约束布局ConstrainLayout
转载自简书
约束布局ConstrainLayout是一个ViewGroup,为了解决布局嵌套过多的翁田,以灵活的方式定位和调整小部件。对比RelativeLayout来说,ConstrainLayout更灵活,性能更出色,ConstraintLayout可以按照比例约束控件位置和尺寸,能更好地适配屏幕大小不同的机型。
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_toBaselineOf | Baseline文本基线对齐 |
3. 角度定位
方法 | 解释 |
---|---|
app:layout_constraintCircleAngle="120" | B的中心在A的中心120度 |
app:layout_constraintCircleRadius="150dp" | 距离为150dp |
4. 边距
在ConstraintLayout中实现margin,必须约束盖控件在ConstraintLyout里的位置
goneMargin:主要用于约束的控件可见性被设置为gone的时候使用的margin值
5. 居中和偏移
RelativeLayout | ConstraintLayout |
---|---|
layout_centerlnParent=ture | app: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
版权属于:Monster_4y
本文链接:https://blog.zmonster.top/60.html
转载时须注明出处及本声明