ConstraintLayout 使用入门(二)

作者: creker | 来源:发表于2019-05-21 23:32 被阅读15次

    最近几个月终于有大把时间总结这两年来所学,荣幸之至
    2019.5.22

    前言

    继续ConstraintLayout 基础入门(一)

    本章节对应内容的练手项目

    目录

    本文包含2.1-2.6的内容


    • 1 基本操作
    • 1.1 相对位置布局
    • 1.2 整体位置布局
    • 1.3 约束比例
    • 1.4 文字基准线对齐
    • 1.5 圆心布局(原文叫 Circular positioning)
    • 2 进阶操作
    • 2.1 View的内容约束 constrainedWidth
    • 2.2 约束偏移量 Bias
    • 2.3 约束链 Chain Style
    • 2.4 宽高比
    • 2.5 百分比布局
    • 2.6 参考线
    • 3.Helper类
    • 3.1 Group
    • 3.2 Layer

    2 进阶操作

    2.2 constrainedWidth

    TextView 或者其他View内容有时候可能会超过约束范围。需要使用layout_constrainedWidthlayout_constrainedHeight,两个属性的默认值均为false。
    文字过多的时候,就像下面这个样子

    图1:文字超出约束范围

    我们对右侧的TextView的设置是在ImageView的右侧,但是我们可以看到文字已经超出了约束范围,把ImageView盖住了。我用橙色把两边超出来的部分圈出来了,可以看到,两边是对称的,所以,有一部分文字还显示在了屏幕外面。
    注意:这里说的是约束范围,不是规定范围,如果你把TextView的width和height写成固定值,无论文字有多少都是不会超出范围的。

    layout_constrainedWidth表示不让宽度超出约束范围,文本如果超出了以后,就会自动换行
    layout_constrainedHeight 表示不让高度超出约束范围,文本如果超出了以后,会直接截断
    两个的默认值均为false。

    在上面的TextView属性中加上app:layout_constrainedWidth="true"以后,就可以得到想要的效果了。

    图2:加入width约束以后的效果

    2.2 约束偏移量 Bias

    bias英文是偏心,偏向的意思
    也是有水平和垂直两个方向
    layout_constraintHorizontal_bias
    layout_constraintVertical_bias
    取值范围是 0.0 -- 1.0 默认值是0.5[就是不设置的时候,控件会放置与两方约束的正中间]。

    这个很好理解,举个例子
    给一个水平垂直方向均居中的View,加入app:layout_constraintVertical_bias="0.2"后,就会在垂直方向重新开始分配权重。上面说了,layout_constraintVertical_bias默认值是0.5,所以我们不写的话,垂直方向就是Top和Bottom各一半儿。改成0.2以后,就会变成这样子。

    图3:约束偏移量

    2.3 2.3 约束链 Chain Style

    app:layout_constraintVertical_chainStyle

    约束链的使用场景是需要将两个以上的View打包的时候[类似于一层布局嵌套]

    layout_constraintVertical_chainStyle有三个取值,分别是 packetspreadspread_inside,默认值是 spread,我们如果用这个属性的话,基本上都是用packet

    packet:表示内部全部打包

    图4:sample_23_test1_packet.png

    使用packet时,如果需要间距,就加上 layout_marginTop 之类的属性

    图5:加入margin

    spread 表示分散,这个值是默认值,和没写一样

    图6:spread

    spread_inside 表示内部分散,他会均匀分布在约束的内部,顶部和底部分别挨着topbottom

    图7:spread_inside

    2.4 宽高比

    宽高比是指,View的宽和高保持固定的比例。需要修改下面两个参数:

    1. width或者height为 0dp [match_constraint]
    2. app:layout_constraintDimensionRatio="比值"
      如果widthheight都是0dp,那么就有一个是铺满的,另一个按照比例缩放

    高:宽 = 2:1
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    ...
    app:layout_constraintDimensionRatio="1:2"

    宽:高 = 2:1
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    ...
    app:layout_constraintDimensionRatio="2:1"

    宽:高 = 2:1[width height均为0dp]
    android:layout_width="0dp"
    android:layout_height="0dp"
    ...
    app:layout_constraintDimensionRatio="2:1"

    三种情况结果如下图:

    图8:宽高比

    2.5 百分比布局

    百分比布局,指heightheightparent的百分比

    1. 对应width或者height的值为0dp[match_constraint]
    2. 设置 app:layout_constraintWidth_percent="percent"app:layout_constraintHeight_percent="percent"percent取值范围为0-1

    比如我们对一个View设置了:
    ...
    android:layout_width="0dp"
    app:layout_constraintWidth_percent="0.77"
    ...
    效果就是:

    图9:百分比布局

    2.6 参考线

    接着上面的百分比布局,上面说道的百分比布局,除了直接使用layout_constraintWidth_percent的方式以外,常用的方式还有使用GuideLine

    GuideLine[辅助线]分垂直方向「vertical」和水平方向「Horizontal
    我们设置好了辅助线以后,就可以以辅助线为约束条件,完成百分比布局.

    使用方式

    <android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.35"
    />
    
    1. android:orientation=表示方向,取值verticalhorizontal
    2. app:layout_constraintGuide_percent="0.35"表示百分比的方向
    3. 另外,辅助线的位置也可以通过
      layout_constraintGuide_end
      layout_constraintGuide_begin
      分别表示从parent的End和Start处移动的长度
    4. 百分比也可以支持负数,这个时候,会跑到屏幕外面去,有的时候会用到。

    借助百分比布局,可以很容易实现下面这个论文简版首页的布局。


    图10:论文首页
    • 加上本小节,一共用了11小节将ConstraintLayout的使用,这个界面就不做分析去写了,可以下来实现一下。


    另外,为了避免看文章枯燥,我准备了一个练手项目,看完以后可以下载下来练习练习。

    再另外,以上都是自己平时所学整理,如果有错误,欢迎留言或者添加微信批评指出,一起学习,共同进步,爱生活,爱技术

    相关文章

      网友评论

        本文标题:ConstraintLayout 使用入门(二)

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