ConstraintLayout在 1.0 的时候提供了 GuideLine 辅助布局,在 1.1 时提供了 Group 和 Barrier,在 2.0 时候提供了Layer以及放开了限制,开发者可以自定义 Helper 了。
Group (Added in 1.1)
Group可以用来控制一组view的可见性
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:constraint_referenced_ids="button4,button9" />
可以通过控制 group 的 hide/show 来直接控制一组 view(button4,button9) 的可见性。
Barrier (Added in 1.1)
来看一个场景,下面是一个表单,Email 和 Password 左对齐 中间的虚线为 GuideLine,具体字段都和GuideLine左对齐。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wGFgfaHo-1630398840402)(https://user-gold-cdn.xitu.io/2019/6/20/16b7364b1b495483?imageView2/0/w/1280/h/960/ignore-error/1)]
现在如果需要做多语言,翻译为德文后变成了下面的效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gm6ICdpp-1630398840405)(https://user-gold-cdn.xitu.io/2019/6/20/16b7364b1b5f6c14?imageView2/0/w/1280/h/960/ignore-error/1)]
这时候就需要Barrier出场了,Barrier是栅栏的意思,可以理解为挡着不让超过。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oc7Yp2S4-1630398840406)(https://user-gold-cdn.xitu.io/2019/6/20/16b7364b1c7a4a19?imageView2/0/w/1280/h/960/ignore-error/1)]
改进方法
- 把中间的虚线GuideLine换成Barrier
- 把①和②加入到Barrier的referenced_ids中
- 指定barrierDirection为right(右侧不超过)
- 把③和④左边对齐到Barrier的右边
这样 Email 和 Password就不会超出Barrier,大致代码如下(有删减,完整代码参考这里)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout>
<TextView
android:id="@+id/tv_email"
app:layout_constraintBottom_toTopOf="@+id/tv_password"
app:layout_constraintStart_toStartOf="@+id/tv_password"
app:layout_constraintTop_toTopOf="parent"
tools:text="E-mail Addresse" />
<EditText
android:id="@+id/et_email"
android:text="me@gmail.com"
app:layout_constraintBaseline_toBaselineOf="@+id/tv_email"
app:layout_constraintStart_toEndOf="@