zoukankan      html  css  js  c++  java
  • 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轶

  • 相关阅读:
    ICONS-图标库
    图形资源
    vue项目中,如果修改了组件名称,vscode编辑器会在引入修改组件的名字处提示红色波浪线 The file is in the program because:Imported via xxx Root file specified for compilation .
    接口在dev环境报跨域问题(has been blocked by CORS policy:Response to preflight request doesn't pass access control check:No 'Access-Control-Allow-Origin' header ispresent on the requested resource.),qa环境正常
    阿里云occ的图片文件URL用浏览器直接打开无法访问,提示This XML file does noe appear to have any style information associated with it. The document tree is shown below.
    vue 项目使用element ui 中tree组件 check-strictly 用法(父子不互相关联的反显情况)
    高德地图进行线路规划绘制标记点操作(vue)
    vue中实现拖拽调整顺序功能
    2021-01-22 浏览器相关知识
    2021-01-22 js 相关知识点
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9134769.html
Copyright © 2011-2022 走看看