ConstrainLayout上手

趁项目上线后的空档期,学习些潮流的技术。ConstrainLayout听说不错,就来使用一波。

相比传统布局,包括LinearLayout/RelativeLayout等主流布局,都有他们的局限,布局复杂时嵌套严重,难以维护,且不能拖拽编辑布局之间的约束关系,效率低下。所以ConstrainLayout石破天惊横空出世。

进入正题,看看它有什么强大之处。


拖拽约束

拖拽布局是传统的操作,重点在于约束操作。根布局使用ConstrainLayout,所有子控件就可以使用约束操作。其中每个子控件周围都有四个“约束点”,拖动这些点可以为其添加四个方向上的约束,且实际布局代码也会自动生成。上图演示了一个button在根布局的居中操作。


控件伸缩

添加约束后的控件可以伸缩,但是中心位置不变。如上图所示。


取消约束

取消控件的约束有几种操作:

1.点击控件上的“约束点”,单独取消该点的约束

2.点击控件,再点击控件左下角的约束图标

3.点击布局顶部往上的工具栏的约束图标


控件之间的约束

上图演示了两个button之间的约束操作,上边的button底部与下边的button顶部形成约束,此时上边的按钮无论如何拖动,都只能在下边的按钮之上。


中心对齐

上图演示了控件的中心水平对齐。


自动约束

点击顶部的工具栏“磁石”按钮即可以开关自动约束。当拖动控件到布局中心时,其四周会显示约束线,若此时取消拖动,则会自动添加四周的约束。

控件布满父布局

上图演示了button填满父布局的操作,简单高效。

布局padding

上一个“matchparent”操作并没有完全填满父布局,因为父布局(ConstrainLayout)设置了padding值,该值可以通过顶部工具栏输入,如上图所示。

控件margin

控件设置margin也简单,在布局右边的操作栏中可以输入控件四边的margin值。


控件自身尺寸

控件的自身尺寸有三种模式:

Fixed: 固定尺寸,你可以设置控件的width/height属性来控制高和宽。

AnySize: 控件占据所有可用(约束范围内)的空间来满足约束。

Wrap Content: 控件所占有的空间是可缩放的,相当于“wrap_content“属性


链式布局

链式布局有有4种模式:spread, packed, spread_inside。具体操作入如上图所示,样式如下图所示。


链式布局样式


GuideLine

Guideline相当于一条辅助线,上图演示了竖直方向的。Guideline有3种模式,分别为距离左右两边多少dp、距离左边百分比。



四周约束(牵引)

layout_constraintLeft_toLeftOf: 将目标控件的左侧牵引到另外一个控件的左侧

layout_constraintRight_toLeftOf: 将目标控件的右侧牵引到另外一个控件的左侧

layout_constraintLeft_toRightOf: 将目标控件的左侧牵引到另外一个控件的右侧

layout_constraintRight_toRightOf: 将目标控件的右侧牵引到另外一个控件的右侧

layout_constraintTop_toTopOf: 将目标控件的上侧牵引到另外一个控件的上侧

layout_constraintTop_toBottomOf: 将目标控件的上侧牵引到另外一个控件的下侧

layout_constraintBottom_toTopOf: 将目标控件的下侧牵引到另外一个控件的上侧

layout_constraintBottom_toBottomOf: 将目标控件的下侧牵引到另外一个控件的下侧

基线对齐

layout_constrainBaseline_toBaselineOf:与目标控件的基线对齐

start,end类(与left,right类似)

layout_constrainStart_toEndOf:将目标控件的左侧与另一控件的右侧对齐

layout_constrainStart_toStartOf:将目标控件的左侧与另一控件的左侧对齐

layout_constrainEnd_toStartOf:将目标控件的右侧与另一控件的左侧对齐

layout_constrainEnd_toEndOf:将目标控件的右侧与另一控件的右侧对齐

布局边距

layout_marginStart:左边距

layout_marginEnd:右边距

layout_marginLeft:左边距

layout_marginRight:右边距

layout_marginLeft:左边距

layout_marginTop:上边距

layout_marginBottom:下边距

基准线(guideline)

orientation:vertical/horizontal  基准线的方向

layout_constrainGuide_begin:基准线起点

layout_constrainGuide_end:基准线终点

layout_constrainGuide_percent:基准线百分比模式,用于指定位置

牵引力

layout_constrainHorizontal_bias:水平方向上的牵引力

layout_constrainVertical_bias:垂直方向上的牵引力

链样式(ChainStyle)

layout_constrainHorizontal_chainStyle:水平方向上的样式

layout_constrainVertical_chainStyle:垂直方向上的样子

链权重

同样的,当几个控件组成链时,可以像LinearLayout一样,对其设置权重分布,调节大小

layout_constrainVertical_weight:设置该控件在链中的权重

宽高属性

ConstrainLayout的宽高属性与普通的布局有所不同,其属性分为三种:wrap_content,具体数值,match_contraint。其中前两种和其他布局类似,当宽高属性设置为match_contraint时,其xml属性显示为:0dp,表现属性为布满约束的区域。

与此同时,ConstrainLayout还支持一种比例的属性:

layout_constrainDimensionRatio:"w,13:2"/"h, 23:23",其中w,h可以不注明, 默认为宽高比

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

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,982评论 3 119
  • 【小说】一次失败的搭讪 /文 李药丸 一 这事跟吃炒花生米原来不一样。不是你把它拿在手里一按,壳就裂开了,香味就弥...
    李药丸阅读 267评论 0 2
  • // Options // OC中的选项使用的NS_OPTIONS定义选项类枚举,就是可以|的 /* typede...
    fordring2008阅读 893评论 0 0