ConstraintLayout从简单使用到详细解剖(一)

ConstraintLayout出来以后逐渐收到越来越多的Android开发者的青睐,我自己也上手使用了一年多,现在xml父布局基本都是他了。所以特开此贴聊聊ConstraintLayout。

ConstraintLayout的主要属性

这是一个用ConstraintLayout为父布局的简单页面,让我们来了解一下ConstraintLayout的主要属性。

app:layout_constraintLeft_toLeftOf=""//控件的left和父布局(parent)或者其他控件的left(@+id/控件id)形成约束

app:layout_constraintRight_toRightOf=""//控件的Right和父布局(parent)或者其他控件的Right(@+id/控件id)形成约束

app:layout_constraintTop_toTopOf=""//控件的Top和父布局(parent)或者其他控件的Top(@+id/控件id)形成约束

app:layout_constraintBottom_toBottomOf=""//控件的Bottom和父布局(parent)或者其他控件的Bottom(@+id/控件id)形成约束

app:layout_constraintLeft_toRightOf=""//控件的left和父布局(parent)或者其他控件的Right(@+id/控件id)形成约束

app:layout_constraintRight_toLeftOf=""//控件的Right和父布局(parent)或者其他控件的Left(@+id/控件id)形成约束

app:layout_constraintTop_toBottomOf=""//控件的Top和父布局(parent)或者其他控件的Bottom(@+id/控件id)形成约束

app:layout_constraintBottom_toTopOf=""//控件的Bottom和父布局(parent)或者其他控件的Top(@+id/控件id)形成约束
复制代码

所谓的约束就是指的是控件的相对定位。例如,控件视图1 app:layout_constraintLeft_toLeftOf="parent" ,则是表示控件视 图1的左边相对父布局左边形成定位,此时再加上 android:layout_marginLeft="50dp"则表示控件视图1左边相对父布局左边距离50dp, 同样,以上其他属性就不难理解了。

贴上布局代码

<Button
        android:id="@+id/btn_one"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:text="视图1"
        android:layout_width="0dp"
        android:layout_height="180dp"/>


<Button
        android:id="@+id/btn_two"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/bth_three"
        app:layout_constraintTop_toBottomOf="@+id/btn_one"
        android:text="视图2"
        android:layout_width="0dp"
        android:layout_height="180dp"/>


<Button
        android:id="@+id/bth_three"
        app:layout_constraintLeft_toRightOf="@+id/btn_two"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_one"
        android:text="视图3"
        android:layout_width="0dp"
        android:layout_height="180dp"/>


<Button
        android:id="@+id/btn_four"
        app:layout_constraintLeft_toLeftOf="@+id/btn_two"
        app:layout_constraintRight_toRightOf="@+id/bth_three"
        app:layout_constraintTop_toBottomOf="@+id/btn_two"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="视图4"
        android:layout_width="0dp"
        android:layout_height="0dp"/>

复制代码

控件本身left和right都形成约束的时候,用0dp表示match,top和bottom也是同理。

来看下面这一组属性

app:layout_goneMarginTop=""//表示该控件top约束的目标控件的visibility=gone时,MarginTop的距离
app:layout_goneMarginBottom=""//表示该控件Bottom约束的目标控件的visibility=gone时,MarginBottom的距离
app:layout_goneMarginLeft=""//表示该控件Left约束的目标控件的visibility=gone时,MarginLeft的距离
app:layout_goneMarginRight=""//表示该控件Right约束的目标控件的visibility=gone时,MarginRight的距离
复制代码

如图,当视图4所约束的视图2visibility=gone,那么视图4和视图2形成的top_toBottomof则无效,视图3和视图2的right_toleftof也失效,此时加入属性

app:layout_goneMarginTop="180dp"
复制代码

属性chainStyle

app:layout_constraintHorizontal_chainStyle="packed"//如下图
复制代码

app:layout_constraintHorizontal_chainStyle="spread_inside"//如下图
复制代码

app:layout_constraintHorizontal_chainStyle="spread"//如下图
复制代码

layout_constraintVertical_chainStyle 同理

属性Circle

主要是这三个属性,大家看代码和示意图,因为作图工具一直down不下来,所以先简单粗暴一些

    app:layout_constraintCircle=""
    app:layout_constraintCircleAngle=""
    app:layout_constraintCircleRadius=""
复制代码

 <Button
        android:id="@+id/btn"
        android:background="#ff78D5"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_width="50dp"
        android:layout_height="50dp"/>


    <Button
        android:id="@+id/btn_cir"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintCircle="@id/btn"
        app:layout_constraintCircleAngle="25"
        app:layout_constraintCircleRadius="100dp"
        android:background="@color/colorPrimary"
        android:layout_width="50dp"
        android:layout_height="50dp"/>

复制代码

转载于:https://juejin.im/post/5c4033e0e51d4505bb56cbf0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值