一起Talk Android吧(第五百一十回:约束布局中的组功能二)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第五百一十回:约束布局中的组功能二)相关的知识,希望对你有一定的参考价值。

文章目录


各位看官们大家好,上一回中咱们说的例子是"约束布局中的组功能",这一回中咱们继续说该例子。闲话休提,言归正转, 让我们一起Talk android吧!

概念介绍

我们在上一章回中介绍了约束布局中的组功能,主要介绍的是Group和Layer。本章回中将介绍另外一种组功能:链(chain).链就是把多个组件组合在一起,在同一方向上按序排列,类似糖葫芦一样。各个组件之间相互连接,在布局管理器看的话,就像一条链把所有组件连接在一起。

使用方法

布局管理器

在布局管理器中选择多个组件,然后点击右键->Chains->选择水平或者垂直链。这样就创建好了链,还可以点击右键选择链的类型,我们可以通过链的类型来控制各个组
件在链上的位置。链的类型有三种,它们的功能如下:

spread           //让链上所有组件均匀分布
spread_inside    //位于链边上和两个组件与父布局对齐,链上其它组件均匀分布
packed           //让链上所有组件排列成一行或者一列,链两边与父布局保持相同的距离

当链的类型设置为seread或者spread_inside时可以在链上每个组件中添加weight属性,然后通过weight属性值来控制各个组件的大小。例如给链上所有组件设置属性:layout_constraintHorizontal_weight,这些组件就会依据各自的weight属性值来调整自身的宽度,注意需要把这些组件的width属性值设置为0dp,不然weight属性不起作用。

此外,如何觉得weight自动调整的大小不好看的话,可以再添加margin属性。这样会让边距也会占用链上的尺寸,进而减小组件的大小(长度或者宽度)。 我之前在线性布局中是通过添加一个线性布局充当占位符来调整组件的大小,这里也可以添加一个同类型的组件充当占位符,不过组件的visiable属性要设置为invisiable。还有一种方法就是使用长度或者宽度的default属性:layout_constraintWidth_default,把该属性值设置为wrap,表示和内容大小保持一致。

代码配置

链主要通过链的类型来控制各个组件的位置。其关键属性是layout_constraintHorizontal_chainStyle="spread",它表示让组件在水平方向组成一个链,链的类型为spread.我们可以在xml文件中给组件添加此属性,这样就可以使用链了。
注意:这个属性只能添加到链头的组件上,链中其它组件不需要添加此属性,不过它们的start和end属性需要相互对齐。

示例代码

介绍完使用方法后,下面我们通过示例代码来演示链的使用方法:

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="Button1"
        app:layout_constraintEnd_toStartOf="@+id/button3"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="Button2"
        app:layout_constraintEnd_toStartOf="@+id/button4"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/button2" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="Button3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/button3" />

经验总结

我觉得创建链时最好通过布局管理器来完成,这样就不需要手动填写各个组件之间start/end的对齐方式。
链中最常用的是使用weight属性调整同一链上各个组件的大小,我觉得此功能非常适用,我在线性布局中经常使用此属性来控制同一方向(水平或者垂直)多个组件的大小。不过这个操作最好通过代码来配置。

到目前为止,我们一共介绍了三个组,我在这里总结一下它们的使用场景,大家在实际项目中可以依据项目需求使用不同的组。

  • Group主要用来显示隐藏组内的控件;
  • Layer主要用来调整组的背景颜色,组的位置以及给组内所有控件添加动画;
  • chains主要用来调整组内控件的对齐方式,同进还可以调整组内控件的大小。

看官们,关于"约束布局中的组功能"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第五百一十回:约束布局中的组功能二)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第五百一十九回:波浪上升动画)

一起Talk Android吧(第五百一十七回:绘制波浪效果)

一起Talk Android吧(第五百一十二回:自定义Dialog)

一起Talk Android吧(第五百一十六回:绘制压力扩散图)

一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)

一起Talk Android吧(第五百一十四回:Java中的进制转换)