先把结论放在前面:ConstraintLayout 的进阶能力可以归成三组——用约束替代嵌套(结构)、用 Barrier / Chain / Guideline 表达动态关系(关系)、用 ConstraintSet 做布局动画与复用(迁移)。会用constraintWidth只能算入门;能把"为什么用 Barrier 而不是嵌套"和"Chain 的三种模式各自在什么场景下失效"讲清楚,才算答全。
这题的典型失分是只背 API 名,不知道用在哪。面试官问"什么时候用 Barrier 不用嵌套",答"要对齐就用 Barrier"等于没答——正确答案里有前提:这三个控件的宽高在运行时才会确定。
三组能力与各自解决的问题
| 能力 | 解决什么 | 典型误用 |
|---|---|---|
| 约束替代嵌套 | 减少层级,缩短测量时间 | 把所有场景都塞进一个巨大约束图,失去可读性 |
| Barrier / Chain / Guideline | 表达"随动态内容对齐""分布""按比例定位" | 用 Barrier 对齐静态内容(多此一举) |
| ConstraintSet | 布局复用、动画、状态切换 | 用它做复杂业务布局(XML |