美文网首页Android-ConstraintLayout
ConstraintLayout属性整理

ConstraintLayout属性整理

作者: kevinsEegets | 来源:发表于2020-08-19 14:17 被阅读0次

    当前控件的X侧在XX控件的X侧

    app:layout_constraintBottom_toBottomOf="@+id/"
    app:layout_constraintBottom_toTopOf="@+id/"
    
    app:layout_constraintEnd_toEndOf="@android:"
    app:layout_constraintEnd_toStartOf="@android:"
    
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintLeft_toRightOf="@+id/"
    
    app:layout_constraintRight_toLeftOf="@+id/"
    app:layout_constraintRight_toRightOf="@+id/"
    
    app:layout_constraintTop_toBottomOf="@+id/"
    app:layout_constraintTop_toTopOf="parent"
    
     app:layout_constraintStart_toEndOf="@android:"
     app:layout_constraintStart_toStartOf="@android:"
    
    app:layout_constraintBaseline_toBaselineOf="@+id/"
    

    例如:

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/header_constrain_edit_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#cccccc">
            <!--布局间相互连接, aaa====bbb, bbb====ccc, 头布局声明连(chainStyle),必须要在头布局声明-->
            <TextView
                android:id="@+id/aaaaa"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginEnd="4dp"
                android:text="AAAAAAAA"
                android:background="#0000ff"
                app:layout_constraintHorizontal_chainStyle="packed"  //重点
                app:layout_constraintEnd_toStartOf="@+id/bbbbb"  //重点
                app:layout_constraintStart_toStartOf="parent"  //重点
                app:layout_constraintBottom_toBottomOf="parent"  //重点
                app:layout_constraintTop_toTopOf="parent" />
    
            <TextView
                android:id="@+id/bbbbb"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/public_ui_25dp"
                android:layout_gravity="center"
                android:focusable="false"
                android:focusableInTouchMode="false"
                android:gravity="center"
                android:text="BBBBBBBBBB"
                android:background="#ff0000"
                app:layout_constraintStart_toEndOf="@+id/aaaaa"  //重点
                app:layout_constraintEnd_toStartOf="@+id/ccccc"  //重点
                android:textColor="@color/public_color_CCCCCC"  //重点
                android:textSize="@dimen/public_font_14sp"
                app:layout_constraintBottom_toBottomOf="parent"  //重点
                app:layout_constraintTop_toTopOf="parent" />
    
            <TextView
                android:id="@+id/ccccc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="#00ff00"
                app:layout_constraintEnd_toEndOf="parent"  //重点
                app:layout_constraintStart_toEndOf="@+id/bbbbb"  //重点
                app:layout_constraintBottom_toBottomOf="parent"  //重点
                app:layout_constraintTop_toTopOf="parent"  //重点
                android:text="CCCCCCCCC"/>
    
        </androidx.constraintlayout.widget.ConstraintLayout>
    

    控制当前 View 所参考的 View 状态为 GONE 的时候的 margin 值

              app:layout_goneMarginBottom="10dp"
              app:layout_goneMarginEnd="10dp"
              app:layout_goneMarginLeft="10dp"
              app:layout_goneMarginRight="10dp:"
              app:layout_goneMarginStart="10dp"
              app:layout_goneMarginTop="10dp"
    

    demo

        <TextView
            android:id="@+id/AAA"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#ff00ff"
            android:visibility="gone"
            android:text="AAAAAAAAAAAAAAAA" />
    
        <TextView
            android:id="@+id/BBB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#ff0000"
            app:layout_constraintStart_toEndOf="@+id/AAA"     //重点
            app:layout_goneMarginLeft="@dimen/public_ui_50dp"   //重点
            android:text="BBBBBB" />
    

    设置当前控件宽高比例:(前提设置一个宽或者高为0,或者使用强制约束)

           app:layout_constraintDimensionRatio="16:9"// 数值支持两种形式:1.float值,代表宽度/高度的比率;2.比率值,宽:高(5:6),高:宽(H,5:6)
    

    demo

    <ImageView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintDimensionRatio="W,169:690"
            android:background="@drawable/ic_launch_logo" />
    

    设置当前控件的偏重:(前提:是当前控件有“不可能”实现的约束的时候:例如,水平约束:控件宽30dp,父控件宽100dp,设置即在父窗体的左边,又在父窗体的右边,这种"不可能"实现的最终会居中显示)

            app:layout_constraintHorizontal_bias="0.3"// 空余区域左边占0.3
            app:layout_constraintVertical_bias="0.3"// 空余区域左边占0.3
    

    demo

    <ImageView
          android:layout_width="50dp"
          android:layout_height="80dp"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintHorizontal_bias="51080"
          android:background="#ff0000" />
    

    设置当前控件位置:(圆形定位:以另一个控件 layout_constraintCircle 为参照物画半径为 layout_constraintCircleRadius 的圆形,在角度 layout_constraintCircleAngle 的位置就是此控件的中心点,以此中心点布局此控件)

            app:layout_constraintCircle="@id/button1" // 引用另一个控件的id,以此控件为参照物
            app:layout_constraintCircleAngle="180" // 圆形的角度,值为:0-360
            app:layout_constraintCircleRadius="100dp" // 圆形的半径
    

    demo

    <ImageView
             android:id="@+id/AAA"
             android:layout_width="100dp"
             android:layout_height="50dp"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             android:background="#ff0000" />
         <ImageView
             android:id="@+id/BBB"
             android:layout_width="30dp"
             android:layout_height="30dp"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintCircle="@+id/AAA"
             app:layout_constraintCircleAngle="125"
             app:layout_constraintCircleRadius="42dp"
             android:background="#ff00ff" />
    

    设置当前最大值、最小值:(当 ConstraintLayout 设置为 WRAP_CONTENT 时生效)

        android:maxHeight
        android:maxWidth
        android:minHeight
        android:minWidth
    

    设置控件宽高:

        使用特定的值
        使用 WRAP_CONTENT,它会要求计算自己的大小
        使用 0dp,相当于 MATCH_CONSTRAINT ,用约束规则指定的大小
    

    设置是否强制约束:(控件有时候想要WRAP_CONTENT,但是当设置为 WRAP_CONTENT 时被视为没有约束,设置强制约束可同时拥有包裹和约束)

            app:layout_constrainedWidth="true"
            app:layout_constrainedHeight="true"
    

    demo

     <ImageView
            android:id="@+id/CCCC"
            android:layout_width="30dp"
            android:layout_height="130dp"
            android:layout_marginLeft="50dp"
            app:layout_constraintStart_toStartOf="parent"
            android:background="#f00" />
    
        <TextView
            android:id="@+id/DDDD"
            android:layout_width="30dp"
            android:layout_height="wrap_content"
            android:text="2000000000000000000000"
            app:layout_constrainedHeight="true"
            app:layout_constraintTop_toTopOf="@+id/CCCC"
            app:layout_constraintBottom_toBottomOf="@+id/CCCC"
            android:background="#ff00ff" />
    

    设置 MATCH_CONSTRAINT(0dp)后约束宽高

        // 宽
            app:layout_constraintWidth_default="percent" // 设置计算方式:取值范围:spread(默认)占用所有符合约束的空间、wrap 占用内容的空间、percent 百分比占用
            app:layout_constraintWidth_max="100dp"// 设置最大值:取值范围:warp、固定dp
            app:layout_constraintWidth_min="wrap"// 设置最小值:取值范围:warp、固定dp
            app:layout_constraintWidth_percent="0.9" // 设置当前值:取值范围:[0-max],相对于父布局的(前提:需指定`app:layout_constraintWidth_default="percent"`)
        // 高:同上
            app:layout_constraintHeight_default="wrap"
            app:layout_constraintHeight_min="100dp"
            app:layout_constraintHeight_percent="0.5"
    

    设置链的样式(在链条的第一个元素设置,剩余空间不包含边距。)

           app:layout_constraintVertical_chainStyle="spread" // 取值范围:
           spread(默认,元素将会分散开来,如果有控件设置 0dp,则权重分空余空间)、
           spread_inside(类似的,但是链的两个端点在两侧不会散开)、
           packed(这条链的元素将被打包在一起。layout_constraintHorizontal_bias、layout_constraintVertical_bias将会影响到元素的位置。)
           app:layout_constraintHorizontal_chainStyle="spread"
    
    

    demo
    https://www.jianshu.com/p/507846bd81c9

    权重链里面分配剩余空间(前提:宽或高设置0dp)

            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintVertical_weight="2"
    

    demo

    
        <ImageView
            android:id="@+id/CCCC"
            android:layout_width="0dp"
            android:layout_height="130dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/DDDD"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_weight="2"
            android:background="#f00" />
    
        <TextView
            android:id="@+id/DDDD"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="0"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_weight="0.1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toEndOf="@+id/CCCC"
            android:background="#ff00ff" />
    

    设置优化器:(可以设置多个,例如:direct|barrier|dimensions)

            app:layout_optimizationLevel="none" // 取值:none : 不优化
                            standard : 默认。仅优化直接和障碍约束
                            direct : 优化直接约束。
                            barrier : 优化屏障约束。
                            chain : 优化链约束(实验)
                            dimensions :优化尺寸测量(实验),减少匹配约束元素的数量。
    

    指定控件的绝对位置(通过这个属性指定位置的控件可以不需要约束关系)

            app:layout_editor_absoluteX="100dp"
            app:layout_editor_absoluteY="100dp"
    

    设置辅助线(辅助布局使用,Guideline,其他控件基于此线找到自己的位置)

            android:orientation="vertical"
            app:layout_constraintGuide_begin="100dp"
            app:layout_constraintGuide_end="50dp"
            app:layout_constraintGuide_percent="0.8"
    

    demo

    <View
            android:id="@+id/guide"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintGuide_percent="0.5"
            android:orientation="vertical"/>
    
        <ImageView
            android:id="@+id/CCCC"
            android:layout_width="100dp"
            android:layout_height="130dp"
            app:layout_constraintTop_toTopOf="@+id/DDDD"
            app:layout_constraintBottom_toBottomOf="@+id/DDDD"
            app:layout_constraintStart_toEndOf="@+id/DDDD"
            android:background="#f00" />
    
        <TextView
            android:id="@+id/DDDD"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="250dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="@+id/guide"
            android:text="0"
            android:background="#ff00ff" />
    

    设置引用的控件(常用于 Barrier Group Placeholder)

        app:constraint_referenced_ids="@string/app_name" // 设置 Barrier 引用的控件。可设置多个,设置的方式是:id, id。(无需加 @id/)
    

    设置屏障(辅助布局使用,Barrier)

        app:barrierAllowsGoneWidgets="true"// 默认为 true,即当 Barrier 引用的控件被 GONE 掉时,则 Barrier 默认的创建行为是在已 GONE 掉控件的已解析位置上进行创建。如果设置为 false,则不会将 GONE 掉的控件考虑在内
        app:barrierDirection="bottom"// 设置 Barrier 方向。可设置的有:bottom、end、left、right、start、top。
    

    demo

    <TextView
            android:id="@+id/AAAA"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:text="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
            android:background="#f00" />
        <TextView
            android:id="@+id/BBBB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toBottomOf="@+id/AAAA"
            android:text="BBBBBBBBBBBBBBBBBBBBBBB"
            app:layout_constraintStart_toStartOf="parent"
            android:background="#ff00ff" />
    
        <androidx.constraintlayout.widget.Barrier
            android:id="@+id/barr"
            app:constraint_referenced_ids="AAAA,BBBB"
            app:barrierDirection="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    

    设置组(辅助布局使用,Group,控制一组控件的可见性)

        android:visibility="gone"
        app:constraint_referenced_ids=""
    

    设置组(辅助布局使用,Placeholder,占位)
    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/1019/8618.html

        app:content="@id/button3" // 将占位符变为有效的视图
        app:emptyVisibility="gone/invisible" // 设置当视图不存在时占位符的可见性。
    

    设置动态约束(主要代码设置)

        app:constraintSet="@string/app_name"
    

    以下属性查看原码发现目前没有用,可能后续版本中添加

            app:layout_constraintBaseline_creator="1"
            app:layout_constraintBottom_creator="2"
            app:layout_constraintLeft_creator="3"
            app:layout_constraintRight_creator="4"
            app:layout_constraintTop_creator="5"
            app:chainUseRtl="true"//
    

    更多 ConstraintLayout动画移步:
    ConstraintLayout 动画 |动态 Constraint |用 Java 实现的 UI
    https://www.jianshu.com/p/575829baa39d

    相关文章

      网友评论

        本文标题:ConstraintLayout属性整理

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