动态图解&实例 ConstraintLayout Chain

想看我更多文章:【张旭童的博客】http://www.jianshu.com/p/9b6e12d8eea0

概述

昨儿写了一篇全文字和JPG、无Gif的博文ConstraintLayout 属性详解 和Chain的使用
主要详解了ConstraintLayout的所有属性,
但是有朋友问Chain是如何通过可视化的方式去添加,
于是便有了此文。

但是只讲解Chain又显得太单薄,
于是我又加入了一个用ConstraintLayout实现商品详情、Item布局的实例。
废话少说,开整:

构建链条 Chain 图文步骤

假设我们要需要构建 竖直的链条。

第一步,先拖三个Button竖直排列。
可以看到在“Design”区域,除了位置,我们还可以调整控件的大小。


第二步,选中三个Button。
可以用鼠标划一个范围选中这N个控件。
也可以用键盘Ctrl + A 全选控件。

第三步,右键->Center Vertically.
链条已经构成了。


第四步,在Design区域上方的工具栏ALign选项中,可以切换水皮方向控件的排列规则
依次左对齐-居中-右对齐

当链条已经构成时,可以从图中看到,每个控件的下方多了一个链条样式的小图标。
第五步,单击链条图标,可以切换ChainStyle。


由上图可以看出,会在三种模式依次循环切换:spread-spread_inside-packed
图示在上文ConstraintLayout 属性详解 和Chain的使用也已经给出:

实战

talking is cheap。让我们一起实战一波,先看一个设计稿:


这是一个常见的详情或Item的布局。
以往情况,如果不使用ConstraintLayout,我们一般会通过嵌套LinearLayout或者使用RelativeLayout去实现它。
嵌套LinearLayout肯定是低效的low方式,我们不提。
而如果有经验的老司机应该会知道,RelativeLayout实现起这种布局是很烦心的,
因为它大体是按照竖直排列,在局部又水平分布了几个控件,我们要死去活来的写N多的below rightOf...
(而且如果RelativeLayout如果要实现几个TextSize不一样 TextView 居中对齐是挺麻烦的。 虽然这个设计稿上没有出现这种case。而现在可以通过ChainAlign轻松实现它。)

DuangDuangDuangDuang,现在ConstraintLayout横空出世,让我们用拖拖拽拽点点的方式来轻松实现它吧。

第一步,去xml修改父布局宽高为WRAP_CONTENT
第二步,拖拽一个ImageView,并按设计稿设置尺寸,布局在父控件顶端


我们只是为了测试,可以设置图片为fitxy,便于观察效果。

第三步,拖拽四个TextView,竖直排列。顺便按照设计稿填充颜色、尺寸等元素

(这两个步骤我撸了四五次,都撸不出完整的gif,大家凑合看,这两张图已经展示了,可以通过Design区域去设置text、textColor、textSize等等等属性)
第四步,设置四个TextView之间的约束、间距等
(我尽力了,电脑上撸这么大的GIF图貌似时长有问题,所以我重复了N次这个过程,分别撸了几张图如下:)
操作步骤就是:利用控件四个边中点的圆圈,和其他控件发生约束。可以利用右侧面板修改控件的属性值。


第五步,拖拽两个TextView放在底部,按照设计稿填充颜色、尺寸等
图略,和第三步相似。(其实是图又录坏了)
第六步,按照设计稿约束底部三个TextView,设置边距等


对于精细尺寸,例如这里三个TextView间距大概5dp,可以通过Inspector区域设置:

第七步, 布局 购物车 加减按钮
购物车按钮使用的是一个自定义View
所以这一小节也顺便讲解如何在ConstraintLayout中拖拽使用自定义View。
关于这个购物车控件,我之前写过相关博文,github地址:https://github.com/mcxtzhang/AnimShopButton


在左上角Pallete区域点击Advanced->view,然后拖动至布局区域后,会弹出弹框让我们选择,我们搜索AnimShopButton(自定义View的名称)即可。
第八步,为 购物车控件 添加约束
查看设计稿,该控件是位于父控件右下角,距离右边和底边有14dp的间距:

第九步,使底部三个TextView竖直居中
这一步是我强加的戏,为了展示Chain的作用。
我把底部的几个控件链接成Chain,并且改变了使它们竖直方向也相对居中。
这时界面突然收缩了,显然是约束哪里出了问题。
于是我们切换到Text页面,查看代码具体哪里出了问题,

定位到价格TextView后,
检查约束,
如果是我们自己手写约束,
app:layout_constraintVertical_bias="1.0"应该不会被写下来,
这一条约束应该是和父控件的WRAP_CONTENT一起,导致布局收缩了。

删掉该条约束,界面预览正常。
第十步,在根布局外面套一层CardView,运行
运行后效果:

总结

可以看出,ConstraintLayoutChain的概念,和前端JS中flex布局是一样的。
如果有ReactNative或者前端经验的童鞋应该一眼可以看出。或者更适应这种布局方式。

使用ConstraintLayout去完成布局,经历短暂的不习惯后,上手后速度还是挺快的,
相比较RelativeLayout它有 可拖拽、可视化的优势,以及轻松完成一些RelativeLayout不太方便完成的布局。
还是推荐大家去使用它的。

文中代码地址在我的Demo合集中:
https://github.com/mcxtzhang/Demos/tree/master/constraintlayoutdemo/src/main

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容