自律给你自由——Android设计布局的新姿势

自律给你自由——设计布局的新姿势

在今天的文章开始之前,有个忙想请大家帮一下,希望在京东、淘宝、当当、亚马逊购买了我的书《Android群英传:神兵利器》的朋友们,帮忙去网店上给个简短的评价,举手之劳,还是多谢大家啦~~

ConstraintLayout基本界面

更新Android Studio 2.2之后,更新了布局设计器,同时,引人了ConstraintLayout,这一布局,旨在降低布局层级,其主要界面如下所示:

1.png

这个界面主要分成下面几个部分:

  • 左侧边栏,包括Palette组件库和Component Tree
  • 中间是布局设计器,包括两部分,左边是视图预览,右边是布局约束
  • 右侧边栏,上面是类似盒子模型的边界和大小布局设计器,下面是属性列表

在熟悉了界面之后,我们要做的就是理解,什么是ConstraintLayout。ConstraintLayout的核心,实际上就是『约束』,这个翻译很直接,也很准确,它可以说是一个强化的
RelativeLayout,只不过比RelativeLayout增加了更多的约束条件和方式,从这一点上去理解,就很容易接受了。

在第一次引人ConstraintLayout的时候,Android Studio会自动去下载依赖,等他自动完成安装即可。
最后,在build.gradle中会添加一行依赖:

compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'

Google提供了一个CodeLab来帮助开发者熟悉这个布局,地址如下所示:

https://codelabs.developers.google.com/codelabs/constraint-layout/index.html#0

同时,2016IO上Google也给出了一个Topic来讲解,地址如下所示:

https://youtu.be/sO9aX87hq9c

ConstraintLayout约束类型

简单的说,约束,就是组件与组件之间的关系,借用官网上的一张图,我们来解释下:

2.png

这里展示的,就是左右两个Button直接的关系,这实际上就是一个简单的相对布局方式,下面我们来看一下具体的约束类型。

当我们点击一个控件的时候,它的显示效果如图所示:

3.png

这里主要包含几种类型的约束

  • 尺寸约束
  • 边界约束
  • 基准线约束

我们一一来看。

尺寸约束

尺寸约束使用的是『实心方块』,如图:

4.png

这个很好理解,就是调整组件的大小。

边界约束

边界约束使用的是『空心圆圈』,如图:

5.png

边界约束,是使用最多的约束,它用于建立组件与组件之间、组件与Parent边界之间的约束关系,实际上,就是确定彼此的相对位置。

基准线约束

基准线约束,使用的是『空心圆角矩形』,如图:

6.png

基准线约束,是让两个带有文本属性的组件进行对齐的,可以让两个组件的文本按照基准线进行对齐。唯一要注意的是,你需要把鼠标放在控件上,等基准线约束的图形亮了,才可以进行拖动。

清除约束

通过工具栏上的『清除约束』按钮,或者是控件上的悬浮提示,都可以清除一个控件的所有约束条件,如图:

7.png

掌握好这几种约束条件的使用后,就可以自己去尝试下了,我们只要拖一个控件,来体验下。

约束示例

这里我把官网上的几个Demo的动图Copy过来:

8.png
9.png
10.png
11.png
12.png

自动约束Autoconnect

在布局设计器的菜单栏上,有一个『磁铁』一样的图标,如图:

13.png

默认这个按钮就是打开的,通过这个,我们可以实现组件约束的自动创建,Demo示例如图:

14.png

这个和PPT里面拖动布局的时候,会弹出对齐的基准线,然后帮你自动居中这些功能类似。实际测试下来,这个功能可以很方便的在拖动组件的时候,帮你写好约束,但有些精确的调整,还是需要手动去创建的。

约束推断Inference

在布局设计器的菜单上,还有一个『灯泡』一样的按钮,通过这个按钮,可以帮我们自动创建组件间的约束关系,他分析的是一个组件附近的组件,并根据当前在设计面板中的位置来创建约束关系,如图所示:

15.png

约束推断这个功能非常强大,我们只需要把组件拖到一个地方,然后就可以通过推断,来完成最基本的约束创建,最后,手动进行完善即可。

16.gif

View Inspector

Inspector界面就是设计布局的右边栏,包含了一个类似盒子模型的布局检查器和对应属性的属性列表,如图所示:

17.png

属性这一块我们就不看了,和大家在XML中写的属性是一样的,只不过这里通过可视化的方式弄出来了,这个之前就有了,我们主要来看下上面的那个界面。

18.png

这上面的ID,不多说了,这个盒子四周的线,代表着我们的Margin设置,在工具栏上,还可以设置Margin的基数,对于MD设计风格,这个基数一般是8dp,所以,这里可以选择X8的Margin:

19.png

另外,最外面边框上还有两个带数字的小圆圈,这个就是控制相对位置的比例的,如图:

20.gif

通过这个比例的设置,我们天然就自带了百分比布局。

最后,最难理解的就是盒子里面的那四根线,如图:

21.png

这里的四根线,在点击后,会发生变化,总共有以下几种:

Fixed

22.png

这样一个类型的线,可以让你写定具体的大小数值。

Wrap Content

23.png

这个就是Wrap Content的含义,包裹内容,没有发生变化。

AnySize

24.png

这个就是最难理解的,它表示组件会占用所有的可用空间来适应约束,类似线性布局中,设置width=0,weight=1的方式。

Align

在工具栏中,可以使用对齐工具,快速给选定组件设置对齐约束,如图:

25.png

我们可以来演示下:

26.gif

Pack

在工具栏中,可以使用Pack工具,快速对组件进行编组操作,如图:

27.gif

快捷布局

在一个组件上点击右键,可以快速创建一些布局的快捷设计,如图所示:

31.png

在这里,可以快速设置组件的居中,对齐等方式。

GuideLine

为了更加灵活的布局,ConstraintLayout还提供了一个GuideLine,如图所示:

28.png

你可以为布局添加水平和竖直引导线,针对这条线来作为基准线布局,如图所示:

29.png

ConstraintLayout布局转换

通过Android Studio,我们可以很方便的把一个普通布局转化为ConstraintLayout,在布局设计器的左边栏下面的Component Tree来进行转换,如图所示:

30.png

转换还是很赞的,但目前还没试过复杂的布局是否有问题。

从代码角度理解ConstraintLayout属性

ConstraintLayout被称为增强的RelativeLayout,是有它的原因的,相对布局提供了layout_toBottomOf类似这样的属性来控制组件间的相对位置,那么ConstraintLayout实际上也是一样的,我们来看这样一个属性:

app:layout_constraintTop_toBottomOf

他代表的是『期望组件的顶部,与指定组件的底部对齐』,那么了解了这个解释方式,其它的属性就很好理解了,所以说,虽然ConstraintLayout不太建议通过代码来布局了,但能理解代码的含义,对理解ConstraintLayout布局是非常有帮助的。

最后,上海的开发者注意啦,9月24日,沪江会举办一次Android技术沙龙,具体内容大家可以看这篇文章:

http://www.huodongxing.com/event/6351789756900

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

推荐阅读更多精彩内容