close
当前位置: 物联网在线 > 技术文库 > android >

Android新特性介绍,ConstraintLayout完全解析

今天给大家带来2017年的第一篇文章,这里先祝大家新年好。

本篇文章的主题是ConstraintLayout。其实ConstraintLayout是Android Studio 2.2中主要的新增功能之一,也是Google在去年的I/O大会上重点宣传的一个功能。我们都知道,在传统的Android开发当中,界面基本都是靠编写XML代码完成的,虽然Android Studio也支持可视化的方式来编写界面,但是操作起来并不方便,我也一直都不推荐使用可视化的方式来编写Android应用程序的界面。

而ConstraintLayout就是为了解决这一现状而出现的。它和传统编写界面的方式恰恰相反,ConstraintLayout非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android Studio根据我们的操作自动生成的。

另外,ConstraintLayout还有一个优点,它可以有效地解决布局嵌套过多的问题。我们平时编写界面,复杂的布局总会伴随着多层的嵌套,而嵌套越多,程序的性能也就越差。ConstraintLayout则是使用约束的方式来指定各个控件的位置和关系的,它有点类似于RelativeLayout,但远比RelativeLayout要更强大。

其实ConstraintLayout属于Android Studio 2.2的新特性,我在去年写《第二行代码》的时候就非常想要将这部分内容加入到新书里面,但是在尝试之后还是放弃了。因为ConstraintLayout的用法很多都是对控件进行拖拽,只用文字或者是一些静态图片实在太难将它的用法表达清楚了,因此不太适合写到书上。我当时的想法就是在博客上面写一篇ConstraintLayout的用法讲解,来弥补一下《第二行代码》中缺失的这部分新特性,那么今天这篇文章来了。

开始

下面我们开始用边学边练的方式来进行学习,首先打开你的Android Studio,并新建一个ConstraintLayoutTest项目。另外,确保你的Android Studio是2.2或以上版本。

为了要使用ConstraintLayout,我们需要在app/build.gradle文件中添加ConstraintLayout的依赖,如下所示。

dependencies { compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' }

目前ConstraintLayout库最新的版本是1.0.0-beta4,还没有推出正式稳定版本,不过这并不影响我们提前进行学习和使用。

现在打开res/layout/activity_main.xml文件,由于这是一个新建的空项目,Android Studio会自动帮我们创建好一个布局,如下图所示。

Android新特性介绍,ConstraintLayout完全解析

不过,Android Studio自动创建的这个布局默认使用的是RelativeLayout,我们可以通过如下操作将它转换成ConstraintLayout。

Android新特性介绍,ConstraintLayout完全解析

转换完成之后,原RelativeLayout中的内容也会自动转换到ConstraintLayout中,比如图中的TextView。如果你不需要它的话,可以选中这个控件,然后按键盘上的Delete键即可删除。

Android新特性介绍,ConstraintLayout完全解析

我们可以看到,现在主操作区域内有两个类似于手机屏幕的界面,左边的是预览界面,右边的是蓝图界面。这两部分都可以用于进行布局编辑工作,区别是左边部分主要用于预览最终的界面效果,右边部分主要用于观察界面内各个控件的约束情况。

基本操作

下面我们来学习一些具体的操作吧,ConstraintLayout的基本用法很简单,比如我们想要向布局中添加一个按钮,那么只需要从左侧的Palette区域拖一个Button进去就可以了,如下图所示。

Android新特性介绍,ConstraintLayout完全解析

虽说现在Button已经添加到界面上了,但是由于我们还没有给Button添加任何的约束,因此Button并不知道自己应该出现在什么位置。现在我们在预览界面上看到的Button位置并不是它最终运行后的实际位置,如果一个控件没有添加任何约束的话,它在运行之后会自动位于界面的左上角。

那么下面我们就来给Button添加约束,每个控件的约束都分为垂直和水平两类,一共可以在四个方向上给控件添加约束,如下图所示。

Android新特性介绍,ConstraintLayout完全解析

上图中Button的上下左右各有一个圆圈,这圆圈就是用来添加约束的,我们可以将约束添加到ConstraintLayout,也可以将约束添加到另一个控件。比如说,想让Button位于布局的右下角,就可以这样添加约束,如下图所示。

Android新特性介绍,ConstraintLayout完全解析


(责任编辑:ioter)

用户喜欢...

利用IC负载开关的特性来安全地降低功耗

为了最大限度地降低功耗,一个简单的MOSFET通常用于为未使用的电路提供电源。然而,更好的选择是使用负载开关,因为它具有额外的功能来处理电源轨管理的许多微妙和变幻莫测的事情。 负...


电容器的发热特性与测量方法

1.关于电容器的发热 随着电子设备的小型化・轻量化,部件的安装密度高,放热性低,装置温度易升高。尤其是功率输出电路元件的发热虽对设备温度的上升有重要影响,但电容器通过大电流...


Android开发者选项之GPU过度绘制

GPU过度绘制定义 如果你粉刷过一个房间或一所房子,就会知道给墙壁涂上颜色需要做大量的工作。假如你还要重新粉刷一次的话,第二次粉刷的颜色会覆盖住第一次的颜色,第一次的颜色就...


自动扫地机器人好用吗?智能特性全面解析

生活在如今这样一个节奏快、工作压力大的时代,我们的压力也是越发的大了,但是人类的智慧是强大的,智能家居...


功率MOSFET的阻性负载开关特性

在功率MOSFET的数据表中,列出了开通延时、开通上升时间,关断延时和关断下降时间,作者经常和许多研发的工程师保持技术的交流,在交流的过程中,发现有些工程师用这些参数来评估功率...


PowerVR让用户使用Android TV访问OTT(互联网内容)

一位智者曾经说过“未来的电视发展是一个难题”,这句话引用自我们之前的博客文章,我能够像我的前辈一样向大家清楚的描述这个问题,他去年曾也阅读过一篇文章“电视和机顶盒芯片组...


Accolade推出的第三代ANIC-200Ku集成网络数据包分类特性!

Accolade公司推出了第三代双端口100G网络ANIC-200Ku PCIe无损数据包采集适配器,该板卡是基于Xilinx UltraScale FPGA,能够从3200万网络数据流中实时分析每一个数据包,系统正常运行情况下功耗只需要...


Android Weekly #276 安卓开发周刊 中文版

您是否了解过Android的Lifecycle-Aware库?(android.jlelse.eu) 我们如何了解Lifecycle-Aware库代码? Nishant Srivastava展示了可以跟踪活动或Lifecycle-Aware的Lifecycle Arch组件的片段,并相应地调整其行为。 为Mos...


Android Weekly #275 安卓开发周刊 中文版

MapMe — Android地图适配器 (medium.com) Josh Burton介绍MapMe,是一个用Kotlin编写的Android库,可以将适配器模式带到地图上。 赞助 CloudRail - 连接到API 10x更快 (cloudrail.com) 当我们用单一的界面连接到所...


10种常用电感的特性比较分析

10种常用电感罗列 1:工字型电感; 2:色环电感; 3:空芯电感: 4:环形线圈电感; 5:贴片叠层高频电感; 6:磁棒电感; 7:SMD贴片功率电感; 8:穿心磁珠 9:贴片磁珠; 10:贴片高频变压器,插件高频变压器; 归纳...