不同于以往的布局,约束布局可以不写代码,而是用类似图形化编程的方式进行布局。


文章目录

  • 基本功能
  • 辅助线
  • 推导约束


基本功能

新建一个空白项目,进入后就可以看到默认代码本身就是约束布局:

android ConstraintLayout 全局权重 安卓constraintlayout_相对布局


在右侧预览界面,选中Hello World的文本框,按delete就可以删除,我们可以看到代码也发生了相应的变化:

android ConstraintLayout 全局权重 安卓constraintlayout_图形化_02


在设计界面左侧,我们可以选择组件,拖动放置到预览屏幕中:

android ConstraintLayout 全局权重 安卓constraintlayout_android studio_03


但此时,如果运行虚拟机,会发现该按钮处于屏幕斜上方,与预览界面显示的不一致:

android ConstraintLayout 全局权重 安卓constraintlayout_图形化_04

这是因为我们没有对该组件进行约束,导致组件默认放置于左上角。点击组件四周的圆圈,将其拖动至屏幕边缘,就可以让组件被拉动到紧贴边缘的位置。当四个圆圈都添加约束后,组件就被居中了,如图所示。

android ConstraintLayout 全局权重 安卓constraintlayout_android_05


约束布局也可以进行子组件之间相对布局,也是通过组件四周的圆圈之间连接并拖动达成的:

android ConstraintLayout 全局权重 安卓constraintlayout_android_06


而右侧的Layout窗口则可以设置组件的偏移,与父容器的间距等:

android ConstraintLayout 全局权重 安卓constraintlayout_自动生成_07


其中的箭头可以点击,来切换组件的宽高是wrap_contentmatch_parent还是fixed,与代码中的对应。

android ConstraintLayout 全局权重 安卓constraintlayout_自动生成_08


按钮的文本、id等属性都可以在右侧编辑……

辅助线

因为约束布局类似于图形编程,所以设置一些辅助线方便我们作图也是很合理的,点击左上方的guideline,就可以添加辅助线。点击显示在屏幕上方的圆圈,可以切换尺度(比如像素绝对值、百分比),当我们想要做一条垂直的中线时,就可以切换到百分比,然后拖动至50%处(拖动点击的位置比较苛刻,需要在圆圈底端与屏幕相切处):

android ConstraintLayout 全局权重 安卓constraintlayout_图形化_09


借助这条辅助线,我们就能做出关于中线对称等效果(点击左上角眼睛图案可以选择显示所有约束):

android ConstraintLayout 全局权重 安卓constraintlayout_自动生成_10

推导约束

前面也说了,必须要有约束,组件的位置才能跟预览界面一致,否则会默认到左上角。但推导约束(Infer Constraint)可以根据当前拖动出来的布局自动创建约束,堪称大杀器。

先清除我们已有的约束(此时运行模拟器可以看到两个按钮都跑到了左上角):

android ConstraintLayout 全局权重 安卓constraintlayout_相对布局_11


再点击推导约束:

android ConstraintLayout 全局权重 安卓constraintlayout_自动生成_12


就可以发现自动生成了许多新约束,使得虚拟机运行结果与预览效果一致。