ConstraintLayout适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来直接进行编写。
更改预览外观
参考:https://developer.android.com/studio/write/layout-editor
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI4MS82YzI4ODYwYjE1YzRiNjFhMmUzZDFlNTRhYWFmMWM4MS5wbmc%3D.png?w=700)
- Design and blueprint:用于选择在编辑器中查看布局的方式。Design视图显示布局的彩色预览,而 Blueprint视图仅显示每个视图的轮廓。
- Screen orientation:用于在横屏和竖屏方向之间旋转设备。
- Device type and size:用于选择设备类型(手机/平板电脑、Android TV 或 Android Wear)和屏幕配置(尺寸和密度)。您可以从多个预配置的设备类型和您自己的 AVD 定义中进行选择,或从列表中选择 Add Device Definition 新建 AVD 定义。
- API version:用于选择要在上面预览布局的 Android 版本。
- 应用主题背景:用于选择将应用到预览的 UI 主题背景。注:此按钮仅对支持的布局样式有效;因此,此列表中的许多主题背景会导致错误。
- Language:用于选择显示 UI 字符串的语言。此列表仅显示字符串资源中可用的语言。如果您要编辑译文,请从下拉菜单中点击 Edit Translations(请参阅使用 Translations Editor 对 UI 进行本地化)。
将布局转换为 ConstraintLayout
低版本的andriod studio 自动创建的这个布局默认使用的是RelativeLayout,我们可以通过如下操作将它转换成ConstraintLayout:
- 在 Android Studio 中打开现有布局并点击编辑器窗口底部的 Design 标签。
- 在 Component Tree 窗口中,右键点击布局,然后点击 Convert layout to ConstraintLayout。
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc5Ni8zNWI5YTk0YzQ4ZjE2OWQxZmU3OTg0NDk2NWViYWMxYy5naWY%3D.gif?w=700)
基本操作
ConstraintLayout的基本用法很简单,比如我们想要向布局中添加一个按钮,那么只需要从左侧的Palette区域拖一个Button进去就可以了,如下图所示。
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzIwMS8zNjhiMDAyM2Q5MTQ0NmQyNTE4MDkyNDNlZTg1MzkyOS5naWY%3D.gif?w=700)
添加约束
虽说现在Button已经添加到界面上了,但是由于我们还没有给Button添加任何的约束,因此Button并不知道自己应该出现在什么位置。
我们在预览界面上看到的Button位置并不是它最终运行后的实际位置,如果一个控件没有添加任何约束的话,它在运行之后会自动位于界面的左上角。在Component Tree处有警告,如上图所示。
那么下面我们就来给Button添加约束,如下图所示:
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc1My8xYjA2NDQ0MjliN2M4ZjdhZDVlMThmMGUxZGMyMTZkOS5wbmc%3D.png?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc2OS9iMmE2ZGQ2MTE2ZjU1MTNhZGVkZWQ4YTEyZGE3NTEzOS5naWY%3D.gif?w=700)
- 每个视图必须至少有两个约束:一个水平和一个垂直。
- 只能在约束控键和共享相同平面的锚点之间创建约束。因此,视图的垂直平面(左侧和右侧)可以仅限于另一个垂直平面; 基线只能限制在其他基线上
- 每个约束控键只能用于一个约束,但可以创建多个约束(从不同的视图)到相同的锚点’
类似地,如果我们想要让Button居中显示,那么就需要给它的上下左右都添加约束,如下图所示。类似地,如果我们想要让Button居中显示,那么就需要给它的上下左右都添加约束,如下图所示。
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzIzNC82ZjM3NDBlMTYxOTY0M2IyNGZhNjIzMjY4OWI1MzA4YS5naWY%3D.gif?w=700)
对齐
ConstraintLayout该如何对齐呢?我们先了解对齐的概念,对齐就是将视图的边缘对齐另一个视图的相同边缘,或者是视图的中心对齐另一个视图的中心。
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQwNC83MGNjNWEyNTY0NDA1M2U2OGQxMDViNTk3OGRmYjg4Yy5wbmc%3D.png?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzU2NC82OGMxMDZlMTZhZDNhZDc2NjIyYWI3OTE4NzY0YTE1NC5naWY%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk1Mi8yZTdkNTY0MjAxM2E4YmMzNmYyNmQ4NzUwMTg4Y2Q3MC5naWY%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkwNS9lNTk3MTcwN2Q5NTRjYzlkZjQ2NDZlZmYxOWMyMWIyMS5naWY%3D.gif?w=700)
删除约束
删除约束的方式一共有三种:
- 删除一个单独的约束,将鼠标悬浮在某个约束的圆圈上,然后该圆圈会变成红色,这个时候单击一下就能删除了
- 删除某一个控件的所有约束,选中一个控件,然后它的左下角会出现一个删除约束的图标,点击该图标就能删除当前控件的所有约束了
- 点击工具栏中的删除约束图标
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk5OS9jYTU1NTM5MDZhMmY4OTcwOGE0ODVkODQxOWNiOGUxNy5naWY%3D.gif?w=700)
视图的inspector
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI3OS9kZjBjODEyOWY1MTRlNjYwNDcyZWY1ZTU0MDQyYzVkNy5wbmc%3D.png?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzU0L2E2ODc0YzhlNWZkZDM5MmI2ZjYzYjI4Y2JjODNjYWU2LmdpZg%3D%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzgwNi9kNGQ1NWY1NTRjZTVlNzMzMjFkMDg1MzE0ZDYzMWEwZS5naWY%3D.gif?w=700)
-
表示wrap content
-
表示Fixed,也就是给控件指定了一个固定的长度或者宽度值。
-
表示Match Constraint
三者的变化如下,单击正方形内即可切换:
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY5MC8xMmUzYTY3NjMyMGI4NTYxNzMxNjA2YTBjOTNiYmJhYS5naWY%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQ3MC9lM2ZhZjAxZjM4M2ZhYzFmMTAwNDI1OTkyOTNkNDM3ZS5naWY%3D.gif?w=700)
GuideLine
Guideline是ConstraintLayout的Guideline辅助对象的实用程序类,该辅助对象不会显示在设备上,它被默认是View.GONE,而且不可改。另外,Guideline仅用用于ConstraintLayou布局。
如果你想创建一个GuideLine,可以点击工具栏的,然后在弹出框中选择水平的还是垂直的:
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzMxOS9mNWY2ZTBhNDMzYmI4NmZlZDg2ZjcwZDFiYzQ0Y2Q1Zi5wbmc%3D.png?w=700)
- 垂直Guideline的宽度为0,高度为ConstraintLayout的高度
- 水平Guideline的宽度为ConstraintLayout的宽度,高度为0
GuideLine也可以认为是视图,其可以根据相对于布局边缘的dp或百分比,将GuideLine定位在布局中,位置确定有三种方式:
- layout_constraintGuide_begin:指定与布局左侧或顶部的固定距离(dp)
- layout_constraintGuide_end:指定与布局右侧或底部的固定距离(dp)
- layout_constraintGuide_percent:指定与布局的宽度或高度的百分比
GuideLine默认的位置确认方式是layout_constraintGuide_begin,我们可以拖动虚线来重新指定它的位置。如果你想改变它的定位方式,单击GuideLine边缘的圆圈以切换位置确认方式。如下图所示。
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk2Mi8wMDgyYWZjOTE1OWZmZGFhOTQ1MjNhNzc1YjFjNGRmYS5naWY%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE1NC8yMDE1MTA4YTVlZTk3OWNkZDc4ODJhNGE4YTUzMmYyMi5naWY%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg0L2M0MDZlOGRhZDVlZDQ1OGQ4ZDczNGJjYzlmNTQzZDk0LmdpZg%3D%3D.gif?w=700)
到这里,我们知道GuideLine其实就是一种约束规则,供其他视图使用,以统一处理距离ConstraintLayout边缘的距离,而不用单独处理约束偏差。
基线约束
不管是英语还是其他语言(汉语除外),为了规范书写会设有四条线,从上至下第三条就是基线,以保证书写更整齐。如下所示:
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg1OS8wZTYyY2M1MzdkMzJhYzU1YjEyMThiNTZiNWNlZWIzMy5wbmc%3D.png?w=700)
将一个TextView从Palette拖到布局,其文本为”ID”,字体大小为18sp 将“Plain
Text”元素从“Palette”拖到布局(纯文本元素是EditText视图),其hint为”Please input the
id”,字体大小为14sp
1.单击TextView“id”元素并将其指针悬停在其上。元素下方出现基线对齐的ab按钮,因为元素中包含文本:
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkwMi9jOWM2ZTJkMDNjM2JlMmE5YTRkOWEzOWFhODA5NTNiNi5wbmc%3D.png?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzMzNi9hZmU1Y2NmNmIyNDdhNDJhZGUzYTBkZDhlZDEwZmMwOC5naWY%3D.gif?w=700)
自动添加约束
自动添加约束的方式主要有两种,一种叫Autoconnect,一种叫Inference
想要使用Autoconnect,首先需要在工具栏中将这个功能启用,默认情况下Autoconnect是不启用的,如下图所示。
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzMzNi9kYTc0NjMzY2I1ZWFkYTliOGZlMTg1NTQxYThhMmZlMC5wbmc%3D.png?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkxMC9kYTE1NDFmZWQ2YTViZDdmOGFhM2NhMDU3MjA3ZDBiZS5naWY%3D.gif?w=700)
![Android-0.Android Studio布局中ConstraintLayout及designer简介 Android-0.Android Studio布局中ConstraintLayout及designer简介](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzM0OC84YjVkMDcyZGQ5N2FiMjdkMmJlYTRmMzU0NDQyNDk3NC5naWY%3D.gif?w=700)
参考:
https://blog.csdn.net/guolin_blog/article/details/53122387
https://blog.csdn.net/io_field/article/details/77894191
https://developer.android.com/studio/write/layout-editor
https://developer.android.com/training/constraint-layout/#constrain-chain
https://developer.android.com/reference/android/support/constraint/ConstraintLayout
https://codelabs.developers.google.com/codelabs/constraint-layout/#0