android约束布局ConstraintLayout
程序员文章站
2022-08-07 15:52:25
https://www.jianshu.com/p/28bc3619fc82...
android约束布ConstraintLayout
- 官方介绍:https://developer.android.google.cn/training/constraint-layout
- 官方例子:views-widgets-samples/ConstraintLayoutExamples at master · android/views-widgets-samples
常用操作
居中
- 如果想让控件居中,设置百分之50即可,如下图
控件按比例显示
- 如果想让控件按比例展示,首先先把切换为Match Constraints(即 android:layout_width=“0dp”),如下图
- 然后就可以看到左上角出现三角形
- 点击三角形即可出现设置比例的ratio
删除约束
- 在windows上通过按住Ctrl再点击约束即会变成红色,此时就可以删除约束了
屏障约束
- 首先右键添加一个barrier
- 添加完后在component tree窗口可以看到该组件
- 然后就可以把放在屏障里的控件拖拽到barrier里面,如图
- 最后设置下方向,然后拖动下放进barrier里的控件试试看
链
-
如果想实现如下效果,那么就要使用链
-
框选要组成链的控件后,右键选择chains即可增加水平链或垂直链
-
之后可以选择对齐方式
-
在这里可以选择不同的style
-
Spread:视图是均匀分布的(在考虑外边距之后)。这是默认值。
-
Spread inside:第一个和最后一个视图固定在链两端的约束边界上,其余视图均匀分布。
-
Weighted:当链设置为 spread 或 spread inside 时,您可以通过将一个或多个视图设置为“match constraints”(0dp) 来填充剩余空间。默认情况下,设置为“match constraints”的每个视图之间的空间均匀分布,但您可以使用 layout_constraintHorizontal_weight 和 layout_constraintVertical_weight 属性为每个视图分配重要性权重。如果您熟悉线性布局中的 layout_weight 的话,就会知道该样式与它的原理是相同的。因此,权重值最高的视图获得的空间最大;相同权重的视图获得同样大小的空间。
-
Packed:视图打包在一起(在考虑外边距之后)。 然后,您可以通过更改链的头视图偏差调整整条链的偏差(左/右或上/下)
动画效果
- 在约束布局中可以使用 ConstraintSet 和 TransitionManager 为尺寸和位置元素的变化添加动画效果,注意这种效果只针对位置和尺寸,不包含颜色等其他
- 而且这种效果的实现需要写两个布局文件,分别作为开始和结束关键帧
fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.keyframe_one)
constraintLayout = findViewById(R.id.constraint_layout) // member variable
}
fun animateToKeyframeTwo() {
val constraintSet = ConstraintSet()
constraintSet.load(this, R.layout.keyframe_two)
TransitionManager.beginDelayedTransition()
constraintSet.applyTo(constraintLayout)
}
参考
- https://developer.android.google.cn/training/constraint-layout
本文地址:https://blog.csdn.net/huweijian5/article/details/84258503