Android开发 - 掌握ConstraintLayout(一)传统布局的问题
在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面。随着ConstraintLayout的推出,这种现象有了很大的改善,而且它可以实现很多传统布局难以实现的功能。
本系列我们就一起来学习ConstraintLayout的使用,来大幅提高我们的生产力。
传统布局
在ConstraintLayout退出之前,我们经常使用FrameLayout, LinearLayout, RelativeLayout, ***Layout等来布局页面。这些布局当然有其方便的地方,但是其方便地同时也限制了我们的使用场景,在写一些复杂页面的时候就显得力不从心,我们先做一下简单地回顾:
- FrameLayout:帧布局。最常用并且简单的布局,通常用于错误页面的显示,蒙层的显示等。
- LinearLayout:线性布局。当我们绘制需要顺序排列的内容时,我们使用使用此布局。
- RelativeLayout:相对布局。相当于ConstraintLayout的低级版本。顾名思义,可以各个View之间相对地指定位置进行布局。
- ...
存在的问题
以上布局并不是完美的,比如我们要布局这个页面:

我们如果使用传统的布局,可能会导致布局的层级多层嵌套:
<RelativeLayout>
<ImageView/>
<ImageView/>
<RelativeLayout>
<TextView/>
<LinearLayout>
<TextView/>
<RelativeLayout>
<EditText/>
</RelativeLayout>
</LinearLayout>
...
</RelativeLayout>
...
</RelativeLayout>
布局复杂
使用传统的布局虽然可以实现我们的需求,但是在代码实现中有非常多的嵌套,而且要结合许多布局的特性来实现,这样复杂的布局让我们难以维护。效率底下
当布局层级越深的时候,系统的绘制效率越低,当子View.invalidate()的时候,也会导致其父View进行重新绘制。
又比如这些布局中相对灵活的RelativeLayout,它会被测量至少两次,已确定最终渲染时的位置,也同样会影响效率。难以创建复杂动画
Android在属性动画(ObjectAnimator)推出之前,执行动画的原理其实只是在绘制的时候执行,并不是真正的改变了布局,在属性推出之后,虽然确实可以改变其真实的布局属性,但是由于布局特性的约束以及各个View之间的约束,创建复杂的动画也并非易事。
ConstraintLayout登场!
下面我们进入本系列的主角:ConstraintLayout!
使用ConstraintLayout可以解决以上传统布局存在的种种问题,而且Android Studio也提供了强大而且简单易用的编辑器,使用它可以让我们的开发效率大大增加。
下一篇我们将介绍它:Android开发 - 使用ConstraintLayout(二)介绍
如有更多疑问,请参考我的其它Android相关博客:我的博客地址
Android开发 - 掌握ConstraintLayout(一)传统布局的问题的更多相关文章
- Android开发 - 掌握ConstraintLayout(十)按比例设置视图大小
有时候在布局界面的时候,UI要求某个View或者某张图片按比例显示,以适应不同的屏幕分辨率. 通常我们时通过自定义View或者引入第三方的库来解决.现在我们既然已经使用了ConstraintLayou ...
- Android开发 - 掌握ConstraintLayout(九)分组(Group)
使用ConstraintLayout后我们的布局是没有层级关系的,各个View之间都是平级关系,但是如果根据某个业务条件来控制多个View的显示与否,我们需要分别对每个View进行控制,需要调用多次s ...
- Android开发 - 掌握ConstraintLayout(五)偏差(Bias)
比如实现这样一个场景: "在屏幕宽度的1/4的地方放置一个View" 使用传统布局时,实现按照屏幕的宽度(高度),或者相对两个View之间距离的一个比例来进行布局,就显得非常麻烦, ...
- Android开发 - 掌握ConstraintLayout(四)创建基本约束
上一篇我们介绍了编辑器的基本使用,本文我们介绍创建基本的约束. "约束"表示View之间的位置关系.当我们在ConstraintLayout布局中创建View时,如果我们没有添加任 ...
- Android开发 - 掌握ConstraintLayout(三)编辑器
从本篇博客开始我们开始介绍如何使用ConstraintLayout. 既然ConstraintLayout叫约束布局,首先我们先介绍什么叫约束(Constraints): 约束(Constraints ...
- Android开发 - 掌握ConstraintLayout(二)介绍
介绍 发布时间 ConstraintLayout是在2016的Google I/O大会上发布的,经过这么长时间的更新,现在已经非常稳定. 支持Android 2.3(API 9)+ 目前的Androi ...
- Android开发 - 掌握ConstraintLayout(八)障碍线(Barrier)
本文我们来介绍障碍线(Barrier)的使用,平常在开发中用的相对要少一些,但是在需要时会非常方便. 它的作用是将多个元素放到这个障碍线里面使时,其中的任何元素的大小或位置变化时都会使它的位置进行改变 ...
- Android开发 - 掌握ConstraintLayout(七)辅助线(Guideline)
了解过UI设计的同学都知道,在设计的时候,我们经常在界面上拖进一些辅助线来帮我们对齐UI元素,或者方便我们统一的页边距. 在ConstraintLayout的编辑器中,同样也支持这样的功能,我们可以创 ...
- Android开发 - 掌握ConstraintLayout(六)链条(Chains)
本文我们介绍链条(Chains),使用它可以将多个View连接起来,互相约束. 可以创建横向的链条,也可以创建纵向的链条,我们以横向的链条举例: 我们先创建三个按钮: 我们选中三个按钮后在上面点右键创 ...
随机推荐
- python解决open()函数、xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题
问题现象: 1.使用open()函数.xlrd.open_workbook()函数打开文件,文件名若包含中文,会报错找不到这个文件或目录. 2.获取sheet时若包含中文,也会报错. #打开文件 fi ...
- 活用RPM获取包的信息
rpm -q 功效大 如果你想要在系统上安装.卸载或是升级软件,需要对系统软件进行查询:或是有如下的场景: 安装了一个软件,需要知道这个软件的版本. 遇到一个文件,不认识它,需要知道它是什么软件,有什 ...
- __iter__ 和 __next__
class F: def __init__(self,x): self.x = x def __iter__(self): #把对象 变成可迭代对象 return self def __next__( ...
- react portals
来源:https://segmentfault.com/a/1190000011668286 Portals是react 16.3 提供的官方解决方案,使得组件可以脱离父组件层级挂载在DOM树的任何位 ...
- Sql入门学习——关系范式
--------关系 --------范式 一.三种关系 1.一对一关系 关系数据库中,第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关. 2.一 ...
- Python函数定义和使用
函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果.通过使用函数,可以提高代码的重复利用率.本文主要介绍Python函数的定义.调用和函数参数设置方法. 函数的定义 Python函数定 ...
- Java学习笔记(十二):java编译跨平台运行原理
class文件由java源代码通过javac编译器编译生成,只能为JVM所识别.
- kubernetes 基础
官网 kubernetes.io 有中文 中文网站 http://docs.kubernetes.org.cn kubectl 详细情况 https://kubernetes.io/docs/ref ...
- Linux查看某个进程的线程
线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间.打开的文件),以使叉分开销最小化 ...
- Python开发——文件操作
文件的读取 http://www.cnblogs.com/linhaifeng/articles/5984922.html