• ConstraintLayout 约束布局


      约束布局ConstraintLayout

      这种布局方式出现已经有一段时间了,刚出现的时候一直以为这种布局只是针对拖拽使用的布局,最近在新项目里看到了这种布局,又重新学习了这种布局,才发现以前真的是图样图森破啊,这种新的布局方式真的太好用了!

    1.引入

    使用之前需要添加这种布局的依赖

    implementation 'com.android.support.constraint:constraint-layout:1.1.0'

    2.使用

    2.1基本布局方式:

    • layout_constraintLeft_toLeftOf
    • layout_constraintLeft_toRightOf
    • layout_constraintRight_toLeftOf
    • layout_constraintRight_toRightOf
    • layout_constraintTop_toTopOf
    • layout_constraintTop_toBottomOf
    • layout_constraintBottom_toTopOf
    • layout_constraintBottom_toBottomOf
    • layout_constraintBaseline_toBaselineOf

    举个栗子:

    layout_constraintLeft_toLeftOf="parent"  //大概意思就是这个控件的左边跟父控件的左边对齐

    layout_constraintRight_toLeftOf="xxx" //该控件的右边跟xxx的左边对齐

    就像这里栗子说的一样,用这些约束方式就可以约束一个控件的具体位置

    这里大家发现这种布局方式跟RelativeLayout是很相似的

    2.2 圆形定位

    layout_constraintCircle :引用另一个小部件ID
    layout_constraintCircleRadius :到其他小部件中心的距离
    layout_constraintCircleAngle :小部件应该在哪个角度(度数,从0到360)

    2.3 width设置为0的用法:

    当设置width为0 的时候可以使该控件填充剩余空间,

    那么我们想使用LL的权重特性该怎么办呢?ConstraintLayout同样也是支持的

    layout_constraintHorizontal_weight="1"

    约束布局里也提供了权重的方法约束宽度,在使用上一定要注意使用权重的控件一定要约束完整,注意:相互约束的控件有Visible差异并不影响约束的完整,使用权重的控件width一定要设置为0

     <Button
            android:id="@+id/btn_01"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="01"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/btn_02"
            app:layout_constraintTop_toBottomOf="@id/textView" />
    
        <Button
            android:id="@+id/btn_02"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="02"
            android:visibility="gone"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toRightOf="@id/btn_01"
            app:layout_constraintRight_toLeftOf="@id/btn_03"
            app:layout_constraintTop_toBottomOf="@id/textView" />
    
        <Button
            android:id="@+id/btn_03"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="03"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toRightOf="@id/btn_02"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/textView" />

    这里发现这种布局方式跟LinearLayout是有相似的地方

    这里就是这种布局方式的优势所在了

    2.4 DimensionRatio比例属性

    app:layout_constraintDimensionRatio="W,16:9"
    app:layout_constraintDimensionRatio="H,16:9"

    这个功能就很牛逼了,过去我们想要指定控件的宽高比例只能在代码中指定宽高,在约束布局中直接使用“尺寸比例”的参数可以直接设置比例

    2.5 bias偏移属性

    app:layout_constraintHorizontal_bias="0.9"
    app:layout_constraintVertical_bias="0.9"
        <TextView
            android:id="@+id/textView2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@color/theme"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.9"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.9" />

    这个属性在合理约束的时候可以使控件实现偏移,中间为0.5,取值范围为[0,1]

    2.6 比例布局

    app:layout_constraintHeight_percent="0.2"
    app:layout_constraintWidth_percent="0.8"

    在宽高设置为0的时候可以使用这两个属性直接设置控件的百分比

    2.7 总结:

    //基本定位
    layout_constraintLeft_toLeftOf
    layout_constraintLeft_toRightOf
    layout_constraintRight_toLeftOf
    layout_constraintRight_toRightOf
    layout_constraintTop_toTopOf
    layout_constraintTop_toBottomOf
    layout_constraintBottom_toTopOf
    layout_constraintBottom_toBottomOf

    //圆形定位
    layout_constraintCircle :引用另一个小部件ID
    layout_constraintCircleRadius :到其他小部件中心的距离
    layout_constraintCircleAngle :小部件应该在哪个角度(度数,从0到360)

    layout_constraintBaseline_toBaselineOf

    # 与left,right类似
    layout_constraintStart_toEndOf
    layout_constraintStart_toStartOf
    layout_constraintEnd_toStartOf
    layout_constraintEnd_toEndOf

    # margin不需要解释
    android:layout_marginStart
    android:layout_marginEnd
    android:layout_marginLeft
    android:layout_marginTop
    android:layout_marginRight
    android:layout_marginBottom

    #当2个view有相对位置的依赖关系,当其中一个view设置1位gone时,这个比较有意思,比方说假设A设置为gone,后,B需要距离父布局的左侧200dp,
    怎么办?这时候,goneMargin属性就派上用场啦,只要设置B的layout_goneMarginLeft=200dp即可。这样,A不为gone的时候,
    B距离A 为android:layout_marginLeft ,A为gone时,B距离父布局左侧layout_goneMarginLeft200dp。
    layout_goneMarginStart
    layout_goneMarginEnd
    layout_goneMarginLeft
    layout_goneMarginTop
    layout_goneMarginRight
    layout_goneMarginBottom

    layout_constraintHorizontal_bias
    layout_constraintVertical_bias

    layout_constraintHorizontal_chainStyle
    layout_constraintVertical_chainStyle

    layout_constraintVertical_weight

    app:layout_constraintHeight_percent
    app:layout_constraintWidth_percent

    android:minWidth 设置布局的最小宽度
    android:minHeight 设置布局的最小高度
    android:maxWidth 设置布局的最大宽度
    android:maxHeight 设置布局的最大高度

     

    可以看出ConstraintLayout 是很全面的一种布局,集合了相对布局,线性布局的特点,同时能使用偏移和百分比的特性,所以省去了嵌套的麻烦,是布局达到了扁平化,省下了很多资源

    by Jungle轶

  • 相关阅读:
    作为技术管理者,我如何保持技术判断力
    管理沟通
    管理规划
    nginx 在浏览器端保持cookie 一致
    openssl 升级操作 -2
    iptables 实际操作 之 规则查询 2
    iptables 概念 1
    openssl 升级 操作 -1
    使用秘钥对登录服务器
    SSH配置免秘钥登录
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9134769.html
Copyright © 2020-2023  润新知