ConstraintLayout 知识点整理

概述

  • 每个View水平竖直 方向都需至少一个约束
  • 未定义约束的View默认在左上角 (0,0) 进行绘制
  • 布局文件 Design TabComponent Tree 中右击 layout 可将原 layout 快速转换为 ConstraintLayout 布局

ConstraintLayout Convert

约束类型详解

  • 父布局位置: 约束View至父布局相应边界
  • 位置顺序: 定义两个View的显示顺序,如定义BView永远在AView右边
  • 对齐: 定义两个View边缘对齐
  • 基线对齐: 定义两个View的文本基线对齐
  • 约束辅线: 定义一条水平/竖直方向上的不可见辅助线,View可基于该辅助线定义约束,辅助线可通过百分比固定值来定义其在水平/竖直方向上的位置

约束偏移

  • 如果一个View的相对两边均定义了约束,且为相同类型(均为固定值或均为自适应),则View两侧的默认约束偏移为 50%,你可以通过调整约束偏移来进一步调整View的位置

视图尺寸约束

  • 高宽计量方式
    • Wrap Content: View将拉伸至足够包裹内容
    • Match Constraints: View将拉伸至约束边缘
    • Fixed: 固定值
  • 比例约束: 在View的高/宽中某一项为match constraints(0dp) 时,可以为View设置高宽比约束

控制链式布局

  • 当一组View中的任何一个都跟同组中的另一View处于双向约束时(水平或竖直方向),可为该组View设置以下几种分布方式:
    • Spread: 均匀分布
    • Spread inside: 首位被固定在链的两端,其他均匀分布
    • Weighted: 类似LinearLayout中的weight,在ConstraintLayout中的属性为layout_constraintHorizontal_weightlayout_constraintVertical_weight
    • Packed: 组内所有View被打包在一起视作一个View,这时你可以通过为链首的View设置偏移来设置打包View的偏移