在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面。随着ConstraintLayout的推出,这种现象有了很大的改善,而且它可以实现很多传统布局难以实现的功能。

本系列我们就一起来学习ConstraintLayout的使用,来大幅提高我们的生产力。

传统布局

在ConstraintLayout退出之前,我们经常使用FrameLayout, LinearLayout, RelativeLayout, ***Layout等来布局页面。这些布局当然有其方便的地方,但是其方便地同时也限制了我们的使用场景,在写一些复杂页面的时候就显得力不从心,我们先做一下简单地回顾:

FrameLayout:帧布局。最常用并且简单的布局,通常用于错误页面的显示,蒙层的显示等。

LinearLayout:线性布局。当我们绘制需要顺序排列的内容时,我们使用使用此布局。

RelativeLayout:相对布局。相当于ConstraintLayout的低级版本。顾名思义,可以各个View之间相对地指定位置进行布局。

存在的问题

以上布局并不是完美的,比如我们要布局这个页面:

我们如果使用传统的布局,可能会导致布局的层级多层嵌套:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

...

...

布局复杂

使用传统的布局虽然可以实现我们的需求,但是在代码实现中有非常多的嵌套,而且要结合许多布局的特性来实现,这样复杂的布局让我们难以维护。

效率底下

当布局层级越深的时候,系统的绘制效率越低,当子View.invalidate()的时候,也会导致其父View进行重新绘制。

又比如这些布局中相对灵活的RelativeLayout,它会被测量至少两次,已确定最终渲染时的位置,也同样会影响效率。

难以创建复杂动画

Android在属性动画(ObjectAnimator)推出之前,执行动画的原理其实只是在绘制的时候执行,并不是真正的改变了布局,在属性推出之后,虽然确实可以改变其真实的布局属性,但是由于布局特性的约束以及各个View之间的约束,创建复杂的动画也并非易事。

ConstraintLayout登场!

下面我们进入本系列的主角:ConstraintLayout!

使用ConstraintLayout可以解决以上传统布局存在的种种问题,而且Android Studio也提供了强大而且简单易用的编辑器,使用它可以让我们的开发效率大大增加。

如有更多疑问,请参考我的其它Android相关博客:我的博客地址

android 线性布局蒙层,Android开发 - 掌握ConstraintLayout(一)传统布局的问题相关推荐

  1. android 按钮加上蒙层,Android PopupWindow增加半透明蒙层

    本文实例为大家分享了Android PopupWindow增加半透明蒙层的具体代码,供大家参考,具体内容如下 先看效果图: 实现代码: BasePopupWindowWithMask.class pa ...

  2. html引导蒙层,web开发中实现图标点击态蒙层

    原标题:web开发中实现图标点击态蒙层 webapp开发中经常需要加入点击二态,即用户点击(tap)页面某个部分时该部分的样式进行相应的变化来相应用户的点击操作,这样能够带来更好的用户体验,今天我们要 ...

  3. android播放页蒙层过渡效果,EasyGuideLayer: 这可能是最简单、灵活、强大的页面蒙层组件了!...

    原标题:EasyGuideLayer: 这可能是最简单.灵活.强大的页面蒙层组件了! 顾名思义,EasyGuideLayer是用于进行Android页面蒙层引导的组件. 特性 链式调用.调用逻辑清晰直 ...

  4. android 圆形图片设置蒙层,Android引导蒙层,安卓新手引导图,引导图层,支持椭圆,圆形,矩形多种形状,一行代码快速搞定-Go语言中文社区...

    新手引导视图,初次打开页面时显示. 支持圆形,椭圆,矩形等多种图形 提示部分支持图片和文字提示 先看效果图 使用步骤. 使用起来特别简单,只需要把GuideView这个类复制到你的项目中就可以了 pa ...

  5. android裁剪界面阴影层,Android应用之定义阴影和裁剪视图技巧

    今天要写的阴影和视图裁剪,无法向下兼容,请注意. Material Design 为用户界面元素引入了深度这个元素.深度帮助用户理解各个元素之间的重要关联和帮助用户关注他们手上的任务. 视图的高度(e ...

  6. 动态生成布局html,HTML5应用开发:神奇的动态布局库isotope教程

    目录 1. isotope介绍 2. 简单的isotope例子 3. Sorting & Filtering 4. 动态添加元素 5. 神奇的布局机制 6. 标记#Hash历史记录 1. is ...

  7. Android线性布局和相对布局的详解和区别

    一.线性布局(LinearLayout) 线性布局:线性布局是我们在开发中最常见的布局方式之一,线性布局可以分为水平线性布局和垂直线性布局这两种布局方式 线性布局的属性(决定布局中元素的位置和布局): ...

  8. Android初试--了解和认识Android

    1.了解Android Android一词本义指"机器人",是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面 ...

  9. Android开发之新手引导蒙层

    因为是做公司内网开发,所以也没用到新手引导的这个功能.但是由于每次更新的时候更新内容已经写在上面,内部人员就是不看的情况下要求做了一个引导页.但是最后呢,还没用上.但是找了好久也找到了一个很好用的第一 ...

最新文章

  1. 进制转换数据结构c语言不用栈,急求!!!用数据结构(C语言)利用栈实现十进制向二(八)进制转换,要有注释,谢谢!...
  2. Alibaba-Dexposed框架在线热补丁修复的使用
  3. [XSY] 相似(DP套DP)
  4. docker更新容器命令 ,自启
  5. Failed with error: ssh variant simple does not support setting port
  6. 深入理解java虚拟机【内存溢出实例】
  7. JAVA day04 数组排序,类和对象
  8. Linux操作系统下SSH默认22端口修改方法
  9. eviews建立时间序列模型_Eviews系列12|时间序列模型常见问题解答
  10. 方差分析(Analysis of Variance,ANOVA)是什么?怎么就可以用来做特征筛选?方差分析(ANOVA)的本质是什么?
  11. SoapUI接口测试——SoapUI简介
  12. MathType软件安装教程及下载地址
  13. 拳王公社:最新虚拟资源项目赚钱成交系统,1.2W字干货大揭秘!
  14. 音视频基本概念:码率、比特率
  15. html的时间格式转换为本地时间,将UTC日期字符串转为本地时间字符串,如@yyyy-MM-dd'T'HH:mm:ssZ转换为本地时间...
  16. 免费java视频教程大全在线观看
  17. 无线传感网络技术与应用项目化教程(一)
  18. 计算机无线传输的标准,最受欢迎的几个无线标准
  19. 服务器上网站缓存,什么是缓存服务器 缓存服务器怎么搭建
  20. 【优化】超详细的LMS算法的matlab实现

热门文章

  1. java 登录编程_Java编程通过session访问需要登录的页面
  2. python如果想测试变量的类型、可以使用_python里测试变量类型用什么
  3. [你必须知道的.NET]第十五回:继承本质论
  4. 由浅到深理解ROS(1)
  5. a.pop啥意思python_python中pop什么意思
  6. python 几何教学_opencv-python教程学习系列11-几何变换
  7. c++清空输入缓冲区_干货 | C++的输入输出方法
  8. python编写代码_用 Python 编写干净、可测试、高质量的代码
  9. 【HDU - 6567】Cotree(树形dp,思维)
  10. 【CodeForces - 574B】Bear and Three Musketeers (枚举边,思维,优秀暴力)