android ConstraintLayout的使用及理解,含demo

demo下载地址

https://download.csdn.net/download/u010672559/10563627

1.约束布局的优点:
Constraint就是约束的意思,简单点描述就是可以减少UI层级,提高性能
参考链接
https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ 解析ConstraintLayout的性能优势
2.调试经历:
自己实际在调试使用的时候有百度过有些人的手写文字介绍,感觉印象比较模糊,后面又有看过郭林的拖拽布局,感觉实际可能自己用的as版本和他的版本不一样,有些同样的操作达不到相同的效果,且拖拽之后的布局文件确实看不懂,或者可读性不高,之后又看了鸿洋的手写布局,感觉基本大概意思能理解,但是实际实用性不高,看了之后自己并不能看了之后就能写出自己以前相对布局或者线程布局能达到的效果,后面就自己摸索了一套自己感觉比较实用的约束布局使用方法
参考链接
https://blog.csdn.net/lmj623565791 ConstraintLayout 完全解析 快来优化你的布局吧-手写
http://blog.csdn.net/guolin_blog/article/details/53122387 Android新特性介绍,ConstraintLayout完全解析-拖拽布局
3.实际应用场景:
因为实际需求是UI会给你个坐标切图,即会告诉你控件的长宽及xy坐标位置,其实也只要知道这些信息就可以完成布局,一般我们主要会用相对布局和线性布局完成,而约束布局则是集成了这两种布局的功能,先说如何根据坐标位置和长宽布局控件,然后介绍位置约束关系
3.1.一般的布局都可以用layout_marginLeft和layout_marginTop确定坐标点,而实际约束布局中需要添加
    app:layout_constraintLeft_toLeftOf="parent" 或者某控件id
    app:layout_constraintTop_toTopOf="parent" 或者某控件id
后layout_marginLeft和layout_marginTop才会生效,即需要添加约束规则,约束了左边和上边的规则,
3.2.另外一种是位置约束关系,即某控件在某控件的哪边,某控件与某控件的某边对齐,而约束布局则是以app:layout_constraintXXX_toXXXOf实现了相对布局里面的上述两种功能,简单易理解的就是如果constraintXXX(对应layout_constraintLeft)的上下左右和toXXXOf(对应_toLeftOf)的上下左右一样的话,就理解为此控件的constraintXXX边与toXXXOf后面的控件的toXXXOf边对齐,实际可以见下面的例子理解,如果constraintXXX的上下左右和toXXXOf的上下左右不相同,可以理解为此控件的constraintXXX(对应onstraintLeft)某边在另一个控件的toXXXtOf(对应toRightOf)某侧,且只有是左右,上下关系的时候才会有效,实际你可以去试下就知道了,且as代码提示也是这样子的,因为自己的左边与某控件的顶部是不存在对齐关系的,也不存在自己的左边在某控件的的顶部,这些都是不符合逻辑的,所以虽然layout_constraintLeft_toTopOf代码直接写不会错,但是实际没意义,且as代码也不会提示这样的操作
4.实例

<Button
    android:id="@+id/bt0"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="60dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    />
<Button
    android:id="@+id/bt1"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:layout_marginLeft="10dp"
    app:layout_constraintLeft_toRightOf="@+id/bt0"
    app:layout_constraintBottom_toBottomOf="@+id/bt0"/>
以上用到的layout_constraintXXX_toXXXOf属性的解释为:
app:layout_constraintLeft_toLeftOf="parent" 可以理解为bt0控件的左边与父控件的左边对齐
app:layout_constraintTop_toTopOf="parent" 可以理解为bt0控件的顶部与父控件的顶部对齐
app:layout_constraintLeft_toRightOf="@+id/bt0" 可以理解为bt1控件的左边在bt0的右侧
app:layout_constraintBottom_toBottomOf="@+id/bt0" 可以理解为bt1控件的底部与bt0控件的底部对齐
android:layout_marginLeft="10dp" 此时的约束关系是bt1与bt0建立的,所以此时的marginLeft是bt1距离bt0的左边10dp
=========
5.其余属性扩展理解
app:layout_constraintHorizontal_bias="0.5" 水平左右设置了约束,其中约束如果是parent,则是相对的parent尺寸,0.5即parent的一半,如果是约束的其余控件,则是以其余控件为基准的距离的0~1的比例了
app:layout_constraintHorizontal_chainStyle="packed" "spread" "spread_inside" 只能放在头控件,控制显示链的显示结构,且需要设置宽度(对应constraintHorizontal)或者高度不为0才会生效

app:layout_constraintHorizontal_weight="1" 水平比例
app:layout_constraintVertical_weight="1" 垂直比例

app:layout_constraintDimensionRatio="H,16:5"  宽高比例(高比宽)
app:layout_constraintDimensionRatio="W,16:5 宽高比例(宽比高)

猜你喜欢

转载自blog.csdn.net/u010672559/article/details/81205752