ConstraintLayout约束布局告别LinearLayo

作者: 千夜零一 | 来源:发表于2020-10-15 10:26 被阅读0次

    引言

      你还在创建layout.xml布局文件后第一时间修改根布局为LinearLayout吗?如果你仍痴迷于LinearLayout线性布局,或是RelativeLayout相对布局,你将在Android进阶之路上进步不大!!!这不是危言耸听。
      在开发过程中经常能遇到一些复杂的UI,可能会出现布局嵌套过多的问题,嵌套得越多,设备绘制视图所需的时间和计算功耗也就越多。这无疑加重了我们项目的响应速率压力,因此告别LinearLayout多层嵌套势在必行!


    介绍

      约束布局ConstraintLayout是我们创建布局后的默认布局,它的存在主要是为了解决布局多层嵌套问题,以灵活的方式定位和调整小部件。
      ConstraintLayout使用起来比RelativeLayout更灵活,性能更出色!还有一点就是ConstraintLayout可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。


    用法

    第一步:添加依赖(在app下build.gradle中)

    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    

    第二步:在布局文件xml中使用


    相对布局定位:

    ConstraintLayout相对定位的用法跟RelativeLayout比较相似。


    相对定位.png

    app:layout_constraintLeft_toLeftOf="@id/相对控件id"
      当前控件左侧与相对控件左侧对齐
    app:layout_constraintLeft_toRightOf="@id/相对控件id"
      当前控件左侧与相对控件右侧对齐
    app:layout_constraintRight_toLeftOf="@id/相对控件id"
      当前控件右侧与相对控件左侧对齐
    app:layout_constraintRight_toRightOf="@id/相对控件id"
      当前控件右侧与相对控件右侧对齐
    app:layout_constraintTop_toTopOf="@id/相对控件id"
      当前控件上侧与相对控件上侧对齐
    app:layout_constraintTop_toBottomOf="@id/相对控件id"
      当前控件上侧与相对控件下侧对齐
    app:layout_constraintBottom_toTopOf="@id/相对控件id"
      当前控件下侧与相对控件上侧对齐
    app:layout_constraintBottom_toBottomOf="@id/相对控件id"
      当前控件下侧与相对控件下侧对齐
    app:layout_constraintStart_toEndOf="@id/相对控件id"
      当前控件开始侧(左)与相对控件结束侧(右)对齐 app:layout_constraintStart_toStartOf="@id/相对控件id"
      当前控件开始侧(左)与相对控件开始侧(左)对齐 app:layout_constraintEnd_toStartOf="@id/相对控件id"
      当前控件控件结束侧(右)与相对控件开始侧(左)对齐 app:layout_constraintEnd_toEndOf="@id/相对控件id"
      当前控件控件结束侧(右)与相对控件控件结束侧(右)对齐

    文本基线约束解释:
    app:layout_constraintBaseline_toBaselineOf="@id/相对控件id"
      当前控件文本基线与相对控件文本基线对齐。
    Tips:文本基线即空间文字的底部。


    角度定位

    用角度+距离来约束布局


    角度定位.png

    app:layout_constraintCircleAngle="角度"
    app:layout_constraintCircleRadius="距离"
    Tips:
      android中的角度是从我们印象中的90度线开始向下延伸的,因为默认向右为X轴,向下为Y轴。
      距离指相对定位的两控件的中心点距离,实际使用中可能需要计算。

    例子:
      在TextView2的布局中,让其相对于TextView1进行角度定位。

    app:layout_constraintCircle="@+id/TextView1"
    app:layout_constraintCircleAngle="120"(角度)
    app:layout_constraintCircleRadius="150dp"(距离)
    

    边距如何设置?

    android:layout_marginStart,开始(左)边距
    android:layout_marginEnd,结束(右)边距
    android:layout_marginLeft,左边距
    android:layout_marginTop,上边距
    android:layout_marginRight,右边距
    android:layout_marginBottom,下边距
    Tips:使用边距时,必须首先使用Constraint相对布局定位,同时Start不能和Right搭配,必须和End。Left同理。


    如何让控件相对居中?

    水平居中
    (AB控件之间水平居中)
    app:layout_constraintLeft_toRightOf="@id/相对A控件id"
    app:layout_constraintRight_toLeftOf="@id/相对B控件id"
    (相对于父布局水平居中)
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    Tips:或者将其换成:Left->Start,Right->End效果一样,但需要配套使用,不能乱搭配。

    垂直居中
    (AB控件之间垂直居中)
    app:layout_constraintTop_toBottomOf="@id/相对A控件id"
    app:layout_constraintBottom_toTopOf="@id/相对B控件id"
    (相对于父布局水平居中)
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"

    偏移
    app:layout_constraintHorizontal_bias 水平偏移
    app:layout_constraintVertical_bias 垂直偏移
    Tips:除Margin属性的另一种偏移方式


    如何将多个布局控件链起来?

    当多个布局需要连接起来时需要用到链布局。
    链样式
    chains提供了3种样式,分别为
    CHAIN_SPREAD —— 展开元素 (默认);
    CHAIN_SPREAD_INSIDE —— 展开元素,但链的两端贴近parent;
    CHAIN_PACKED —— 链的元素将被打包在一起。

    水平链
    app:layout_constraintHorizontal_chainStyle="链条样式"
    垂直链
    app:layout_constraintVertical_chainStyle="链条样式"
    权重链
    layout_constraintHorizontal_weight=“水平链权重”
    layout_constraintVertical_weight=“垂直链权重”
    Tips:首先需要设置宽度为0dp(设置水平链权重时),设置高度为0dp(设置垂直链权重时)。

    相关文章

      网友评论

        本文标题:ConstraintLayout约束布局告别LinearLayo

        本文链接:https://www.haomeiwen.com/subject/pijnpktx.html