美文网首页
ConstraintLayout 约束布局

ConstraintLayout 约束布局

作者: 8ba406212441 | 来源:发表于2018-07-27 12:21 被阅读86次

    ConstraintLayout出现有一段时间了,不过一直没有特别去关注,也多多少少看了一些文字介绍,多数都是对使用可视化布局拖拽,目前感觉该布局控件比较成熟了,看介绍该布局使用简单,性能优势,于是乎:开始学习了一下ConstraintLayout。

    对于可视化界面学习推荐:

    手写布局:

    约束布局属性
    https://www.jianshu.com/p/17ec9bd6ca8a

    https://blog.csdn.net/lmj623565791/article/details/78011599?utm_source=tuicool&utm_medium=referral

    使用

    提供了surpport包,API level 9以上,包括9都可以使用。

    <android.support.constraint.ConstraintLayout
      ...>
    </android.support.constraint.ConstraintLayout>
    
    

    约束类型

    • Relative positioning,相对定位
    • Margins,边距
    • Centering positioning,中心定位
    • Visibility behavior,可见性
    • Dimension constrants,尺寸约束
    • Chains,链
    • Virtural Helpers objects,虚拟帮助对象

    具体使用

    1. Relative positioning,相对定位
      首先对于一个View来说,边界的名称如下图
    image.png
    对于b在a的右边可以在b的view中使用:
    
    layout_constraintLeft_toRightOf:布局的左边,在目标布局的右边
    
    
    image.png

    以此类推还有:

        • layout_constraintLeft_toRightOf:布局的左边,在目标布局的右边
        • layout_constraintRight_toLeftOf:布局的右边在目标布局的左边
        • layout_constraintRight_toRightOf:布局的右边在在目标的右边
        • layout_constraintTop_toTopOf:布局的顶部在目标布局的顶部
        • layout_constraintTop_toBottomOf:bottom of
        • layout_constraintBottom_toTopOf:above to
        • layout_constraintBottom_toBottomOf :底部对齐
        • layout_constraintBaseline_toBaselineOf:baseline对齐
        • layout_constraintStart_toEndOf
        • layout_constraintStart_toStartOf
        • layout_constraintEnd_toStartOf
        • layout_constraintEnd_toEndOf
    
    
    1. Margins:边距
    image.png
    普通用法(与其他layout的margin用法相同):
    
        • android:layout_marginStart
        • android:layout_marginEnd
        • android:layout_marginLeft
        • android:layout_marginTop
        • android:layout_marginRight
        • android:layout_marginBottom
    
    

    特有用法,当约束自己的View不可见时,下面的属性就比上面的属性优先生效(满足view gone之后的边距与gone之前的边距不同的需求)

    • layout_goneMarginStart
    • layout_goneMarginEnd
    • layout_goneMarginLeft
    • layout_goneMarginTop
    • layout_goneMarginRight
    • layout_goneMarginBottom
    
    

    比如上面A约束着B,B有两个属性margin_left和goneMarginLeft,当A Gone之后,假如有gonMarinLeft那么goneMarinLeft就会生效,marin_left不会生效。

    1. Centering positioning and bias 中心定位和偏移
    image.png
                 <Button android:id="@+id/button" ...
                     app:layout_constraintLeft_toLeftOf="parent"
                     app:layout_constraintRight_toRightOf="parent/>
    
    

    bias偏移:
    • layout_constraintHorizontal_bias
    • layout_constraintVertical_bias

    image.png
                 <Button android:id="@+id/button" ...
                     app:layout_constraintHorizontal_bias="0.3"
                     app:layout_constraintLeft_toLeftOf="parent"
                     app:layout_constraintRight_toRightOf="parent/>
    
    
    1. Visibility behavior 可见性行为的变化
      通常情况下,一个view gone之后,就会消失在父布局中,但是在ConstrantsLayout中,gone的View会被看做是一个点。对其他的布局的约束也会重设,所有的Marin会变成0。
    image.png
    1. Dimens 尺寸
      1、不支持match_parent,使用0dp,相当于"MATCH_CONSTRAINT"
      2、可以设置minWidth和minHeight,设置wrap_content的时候生效
      3、固定大小,wrap_cotent,0dp(约束性大小)
      4、Ratio,比例width:height
      也可以都传0dp,然后通过前置的H或者W,来判断约束的是高还是宽
    <Button android:layout_width="0dp"
             android:layout_height="0dp"
             app:layout_constraintDimensionRatio="H,16:9"                           
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>
    H:W = 16:9,H是match_parent
    
    
    1. Chain 链
      最基本的链:
    image.png
        <Button
        android:id="@+id/button_a"
        android:layout_width="100dp"
        android:layout_height="50dp"
        app:layout_constraintHorizontal_chainStyle="spread"
        app:layout_constraintRight_toLeftOf="@id/button_b"
        app:layout_constraintLeft_toLeftOf="parent"
        android:text="A"/>
    
        <Button
        android:id="@+id/button_b"
        android:layout_width="100dp"
        android:layout_height="50dp"
        app:layout_constraintLeft_toRightOf="@id/button_a"
        app:layout_constraintRight_toRightOf="parent"
            android:text="B"/>
    
    

    链的头(head)

    image.png

    最左或最上的view是head,head可以设置chain的style
    链的样式

    image.png

    packed和spread属性在head上可以使用chainStyle来设置。
    bias可以把chain当成整体,在head上写bias的属性

    设置weighted chain需要用到

    layout_constraintHorizontal_weight 
    或
    layout_constraintVertical_weight
    
    
    1. 帮助布局的工具
      GuideLine,辅助布局对象,会被标记为GONE。只会在ConstantLayout中工作。当成辅助布局的线就行了。
        <android.support.constraint.Guideline
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/guideline"
                app:layout_constraintGuide_begin="100dp"
                android:orientation="vertical"/>
    
    

    后记

    转载于:https://www.jianshu.com/p/b4cf7d732129

    相关文章

      网友评论

          本文标题:ConstraintLayout 约束布局

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