使用ConstraintLayout总结(持续更新)

参考文章

  1. constrainlayout官方说明
  2. constrainlayout约束性布局指示梳理
  3. 约束布局constrainlayout看这一篇足够了
  4. 使用约束布局constrainlayout动态设计你的Android视图
  5. Android新特性:constrainlayout使用

constrainlayout是Android很早版本提供的一个布局view,针对嵌套多层的布局view可以很方便的通过约束实现单层布局(内质是viewgroup),类似于relativelayout但是优于relativelayout,最新版本新建布局文件默认rootview正是constrainlayout。解释说明上面大神都说的很明白了,我就不班门弄斧了,此处主要是做整理总结(更多是在我的使用过程中进行整理,方便后续自己查阅,也方便大家参考),下面总结是通过其属性分类进行整理的(在使用过程中持续更新)

  1. 相对布局(Relative position),理解相对布局需要优先理解三个名词:源控件,目标控件,父view,后面很容易理解,前面两个比如:a控件在b控件左面:a为目标控件,b为源控件。
        * left/right,start/end区别:这四个属性都是控制view组件横向的,前面两个是固定绝对布局,后面两个是区分阅读方向的,后续Android系统支持阅读(适配地区阅读习惯)ltr/rtl,中国ltr阅读习惯,使用前面更好一些,后面有版本要求(api>=17)
        * 相对布局属性是针对源控件和目标控件的,比如:app:layout_constraintLeft_toLeftOf:前面left是目标控件左侧,后面left是源控件的左侧,其他属性雷同
        * app:layout_constraintBaseline_toBaselineOf:textview(文本控件)特有属性,textview存在基线对齐,此属性是定义两个textview基于基线对齐。
        * 约束布局属性效果依赖于目标view的width和height的设置,具体可以参考下面的尺寸约束。
  2. 边距(margins)
        * 约束布局的margins和普通view的margins属性设置保持一致,需要注意的是margins设置生效是基于上面的relative position设置的。
        * 约束布局提供了view隐藏就不显示的margins,此种场景很常见的,比如a,b两个横向控件,a显示,b控件距a5dp,a隐藏,b控件取消间距,以前需要动态代码去处理,此时利用这个属性app:layout_goneMarginLeft(其他方向雷同),可以轻松实现。
  3. 可见性行为(Visible behavior)类似于view的INVISIBLE状态,view隐藏但是view的布局状态还存在,其他相对于此view的其他view margin,相对状态等还存在,这个牛逼的是,会将view浓缩成一个点,不让其占用布局。即可以实现view即gone掉,又可以保持其对应的约束条件不发生改变,约束条件存在在某些场景好用,两个居中变单个居中,在另外一些场景不好用即需要保留前面的view的布局大小的时候。
  4. view相对于父view居中定位:        
    父view居中定位描述
  5. 偏差(bias)
        * bias是子view基于父view进行位置调控的,并不是两个或者多个子view进行位置调控,和linearlayout的weight还不太一样(理论上应该能够实现weight的效果)。
        * bias既然是基于父view的,很明显bias属性也依赖于上面的居中定位属性(反向属性)
  6. 圆形定位:以圆的角度进行布局控制,平时用到不多,不再整理
  7. 尺寸约束
        * view设置为wrapcontent时候系统属性minwidth/maxheight等系统属性可以支持,早期版本可能依赖于下面的强制约束的属性,此处不太明白,还没有使用场景,待以后使用后重新整理,
        * 控件尺寸约束即空间的width/height的设置存在下面三种状态:直接写死dp/wrapcontent(此状态上面的relative position可能存在问题,view自己计算width/height会占用本不属于他的布局)/0dp(相对于约束布局中的matchprarent,全部填充父布局)
        * 针对上面提到的设置width为wrapcontent后,宽度的约束维度不起作用(实测view宽度会无视约束无限制的去绘制),设置下面两个属性可以强制当前view执行宽高度约束,即:app:layout_constrainedWidth=”true|false”【默认false】/app:layout_constrainedHeight=”true|false”【默认false】
        * 针对上面提到知识点,view的宽高设置可以根据场景动态的设置具体/0dp/wrapcontent

        * width/height设置为0dp后,通过下面的属性可以方便的控制其最小、最大宽高度。即:
    image.png

        * 上面提到的百分比比较特殊,即可以设置最小比例,还可以设置最大比例,不过都是相对于父布局来说的。
  8. 设置宽高比例(ratio)布局开发中很多场景都使用到宽高比例动态布局,以前的是实现是根据比例动态测绘view的宽高,使用这个属性不需要那么麻烦,即: app:layout_constraintDimensionRatio
        * 使用这个属性设置宽高比:两种设置:一是浮点数另一个是比例值
  9. 链:链是作用于多个view的,可以实现类似于lianearlayout的weight的特性,不过这个属性实现的功能更强一些:
        * 链头:当前父view的所有子view可以看做是一个链,其第一个子view为链头,属性也是设置给链头view,且链存在多个模式:平分布局(spread)/扩散对齐(spread_inside)/按比例分割(spread,但是借助其他属性)/连接居中对齐(packed)/连接居中对齐(带有偏移量,packed但是借助其他属性)
        * 按比例分割/带有偏移量居中对齐两种设置都是在设置的基础上依赖其他属性,即:比例分割依赖于:app:layout_constraintHorizontal_weight/偏移量居中对齐依赖上面的偏移量属性
  10. 辅助布局:
        * guideline:布局辅助线,不会再具体布局中显示,类似于一个标杆,在复杂布局中,多个view相对于父view布局比较麻烦的时候,可以横向/竖向画一条参考线,让布局view参考这个线进行布局,进而大大的简化了布局
        * guideline相对于父view,具体定位通过下面三个属性定位:
    image.png

        barrier:对齐方式辅助类,通过属性app:barrierDirection="start"设置其前对齐还是后对齐,可以控制对个view空间对齐到一条线,表单文件常用
        
    group:嵌套布局简化了布局嵌套,让复杂的布局都存在于一个层级中,很复杂的一个问题就是控制多个view显示还是隐藏,以前可以通过父布局很简单的控制,当前去掉了层级再通过父布局不容易控制通过group可以将子view进行打包处理,完整控制,存在两个问题:
    • group的优先级高于单个view,即group设置属性后group里面的单个view设置无效。
    • group当前仅用于多view的显示和隐藏还有就是多view的z轴设置,其他的功能属性目前系统不支持。
           placeholder约束布局中的占位辅助类,和普通布局中的ViewStub类似,需要的时候再初始化并设置到对应的位置
          *辅助布局不是通过属性控制,都是类似于view的辅助类声明实现
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容