在传统的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(一)传统布局的问题 1相关推荐

  1. Android开发 - 掌握ConstraintLayout(一)传统布局的问题

    在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面.随着 ...

  2. Android开发 - 掌握ConstraintLayout(四)创建基本约束

    上一篇我们介绍了编辑器的基本使用,本文我们介绍创建基本的约束. "约束"表示View之间的位置关系.当我们在ConstraintLayout布局中创建View时,如果我们没有添加任 ...

  3. Android开发 - 掌握ConstraintLayout(七)辅助线(Guideline)

    了解过UI设计的同学都知道,在设计的时候,我们经常在界面上拖进一些辅助线来帮我们对齐UI元素,或者方便我们统一的页边距. 在ConstraintLayout的编辑器中,同样也支持这样的功能,我们可以创 ...

  4. Android开发 - 掌握ConstraintLayout(六)链条(Chains)

    本文我们介绍链条(Chains),使用它可以将多个View连接起来,互相约束. 可以创建横向的链条,也可以创建纵向的链条,我们以横向的链条举例: 我们先创建三个按钮: 我们选中三个按钮后在上面点右键创 ...

  5. android 线性布局蒙层,Android开发 - 掌握ConstraintLayout(一)传统布局的问题

    在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面.随着 ...

  6. android.复杂动画实现,Android开发 - 掌握ConstraintLayout(十一)复杂动画!如此简单!...

    介绍 本系列我们已经介绍了ConstraintLayout的基本用法.学习到这里,相信你已经熟悉ConstraintLayout的基本使用了,如果你对它的用法还不了解,建议您先阅读我之前的文章. 使用 ...

  7. 安卓前端布局Android,Android开发的几种常见布局

    目前正在从事iOS开发,对于安卓就是大学的时候自学了点,做过几个小的项目,软件外包大赛.计算机设计大赛.移动应用大赛都拿过奖项,呵呵...现在回想起来以前大学做的安卓比赛是多么的幼稚. 从现在开始我要 ...

  8. Android 开发(02)UI布局方式

    一.View 和 ViewGroup 1.View View:所有可视化控件的父类,提供组件描绘和事件处理方法 常用的属性:id.background.padding等 2.ViewGroup Vie ...

  9. Android开发之详解五大布局

    为了适应各式各样的界面风格,Android系统提供了5种布局,这5种布局分别是: LinearLayout(线性布局) TableLayout(表格布局) RelativeLayout(相对布局) A ...

  10. Android开发学习之卡片式布局的简单实现

    GoogleNow是Android4.1全新推出的一款应用,它可以全面了解你的使用习惯,并为你提供现在或者未来可能用到的各种信息,GoogleNow提供的信息关联度较高,几乎是瞬间返回答案,总而言之, ...

最新文章

  1. catboost是什么?相对于xgboost以及lightgbm有什么优势?如何使用randomSearchCV和Catboost进行组合获取最优参数组合?
  2. 官网拉取fuchsia代码
  3. Apache Cordova for ios环境配置
  4. Kitten编程猫 里的克隆体无法进行边缘检测
  5. MODIS NDVI数据处理相关问题
  6. 离散数学计算机科学丛书答案,计算机《离散数学》期中试卷答案.docx
  7. IOS开发之MVC模式的介绍
  8. SAP License:SAP中的默认帐户与密码应用
  9. python docx 表格打印不显示_python-docx 设置 word 文档中表格格式
  10. sm4 前后端 加密_7 个开源的 Spring Boot 前后端分离优质项目
  11. 快逸报表之在IE打印问题
  12. 2018-2019-1 20165318 20165322 20165326 实验二 固件程序设计
  13. 常用的前端还款计算器(包括按月等额本息、按四月等额本息、到期还本付息、到期还本按月付息四种还款方式)
  14. linux vi面板如何复制一行
  15. linux 的tac命令,每天学一个 Linux 命令(102):tac
  16. 一、 WIN32程序
  17. 基于RNN的序列化推荐系统总结
  18. JAVA容器,什么叫JAVA容器?
  19. 贪吃蛇小游戏(代码)
  20. UVA11183 Teen Girl Squad —— 最小树形图

热门文章

  1. linux编译后 空间不足,Linux系统/run/systemd空间不足问题解决
  2. 官宣 | 千呼万唤,Apache Flink 1.11.0 正式发布啦!(内含福利)
  3. Flink Batch SQL 1.10 实践
  4. Apache Flink 进阶(五):数据类型和序列化
  5. b+树时间复杂度_几分钟学会Java实现图的最小生成树:Kruskal算法
  6. 2021年江苏省高考成绩什么时候可以查询,2021年江苏高考成绩什么时候出来 成绩查询时间...
  7. postgis java_Postgresql结合postgis使用java的JDBC连接
  8. mysql 两条数据相减_mysql 实现相邻两条数据相减
  9. 单网卡同时上内外网_Win10双网卡上网冲突(内网、外网)
  10. ad20如何画出pcb板大小_PCB板过孔对高频信号传输的影响,一定要重视