不同于以往的布局,约束布局可以不写代码,而是用类似图形化编程的方式进行布局。
基本功能
新建一个空白项目,进入后就可以看到默认代码本身就是约束布局:
在右侧预览界面,选中Hello World的文本框,按delete就可以删除,我们可以看到代码也发生了相应的变化:
在设计界面左侧,我们可以选择组件,拖动放置到预览屏幕中:
但此时,如果运行虚拟机,会发现该按钮处于屏幕斜上方,与预览界面显示的不一致:
这是因为我们没有对该组件进行约束,导致组件默认放置于左上角。点击组件四周的圆圈,将其拖动至屏幕边缘,就可以让组件被拉动到紧贴边缘的位置。当四个圆圈都添加约束后,组件就被居中了,如图所示。
约束布局也可以进行子组件之间相对布局,也是通过组件四周的圆圈之间连接并拖动达成的:
而右侧的Layout窗口则可以设置组件的偏移,与父容器的间距等:
其中的箭头可以点击,来切换组件的宽高是wrap_content
、match_parent
还是fixed
,与代码中的对应。
按钮的文本、id等属性都可以在右侧编辑……
辅助线
因为约束布局类似于图形编程,所以设置一些辅助线方便我们作图也是很合理的,点击左上方的guideline,就可以添加辅助线。点击显示在屏幕上方的圆圈,可以切换尺度(比如像素绝对值、百分比),当我们想要做一条垂直的中线时,就可以切换到百分比,然后拖动至50%处(拖动点击的位置比较苛刻,需要在圆圈底端与屏幕相切处):
借助这条辅助线,我们就能做出关于中线对称等效果(点击左上角眼睛图案可以选择显示所有约束):
推导约束
前面也说了,必须要有约束,组件的位置才能跟预览界面一致,否则会默认到左上角。但推导约束(Infer Constraint)可以根据当前拖动出来的布局自动创建约束,堪称大杀器。
先清除我们已有的约束(此时运行模拟器可以看到两个按钮都跑到了左上角):
再点击推导约束:
就可以发现自动生成了许多新约束,使得虚拟机运行结果与预览效果一致。