效果是一样的,可以自动充满剩余空间

  • 例子一
    在这里插入图片描述
    我们上图如上设置,左右margin是无效的,需要加上layout_constrainedWidth,如下图
    在这里插入图片描述
    我们也可以把layout_width设置成0dp,文字长的时候,正常,短的时候,我们希望是居中的,就不对了。
    在这里插入图片描述
  • 例子二
    在这里插入图片描述
    本来想的是,让tv_name在,parent和barrier之间展示,内容长的话,结果就变成上图那样了,完全没达到效果。应该改成layout_width=“0dp”

多控件居中显示

ConstraintLayout 实现多个控件居中显示

ConstraintLayout布局中使用include引用布局,约束属性不起作用

问题:使用约束布局时,再使用include引用布局,造成约束的一些属性没有起作用。
解决方案:重写 android:layout_width、android:layout_height 这两个属性。
在这里插入图片描述

margin使用的问题

大家在使用的时候,有没有遇到过margin有时有效有时无效的问题呢?这个其实是和相对谁有关系的。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/bg_color">
        android:id="@+id/view_outside_bg"
        style="@style/msg_box_top_outside_bg"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />
    <com.sohu.sohuvideo.ui.template.vlayout.view.CircleIconWithIdentityLayout
        android:id="@+id/rc_user_container"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginTop="@dimen/dp_18"
        android:layout_marginLeft="@dimen/dp_15"
        android:layout_width="@dimen/dp_40"
        android:layout_height="@dimen/dp_40" />
    <LinearLayout
        android:id="@+id/right_part"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        style="@style/msg_box_content_container"
        android:orientation="vertical"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/rc_user_container"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/rl_content">
        <!--顶部-->
        <include layout="@layout/layout_feed_msg_user_info" />
        <TextView
            android:id="@+id/tv_comment_reply_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp_8"
            android:textColor="#FF1A1A1A"
            android:lineSpacingExtra="4dp"
            android:textSize="15sp"
            tools:text="一个人至少拥我都挖掘的骄傲我的家哇哦就打我至少拥我都挖掘的骄傲我的家哇哦就打我打我的 有一个梦想,有一个理由去坚强。心若没有栖息的地方,到哪里都是在流浪。" />
        <ViewStub
            android:id="@+id/vs_feed_msg_comment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout="@layout/layout_feed_msg_comment" />
    </LinearLayout>
    <RelativeLayout
        android:id="@+id/rl_content"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_f2f5f7_corner_3"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:paddingRight="8dp"
        android:paddingLeft="10dp"
        android:layout_marginRight="@dimen/dp_8"
        app:layout_constraintBottom_toTopOf="@+id/tv_comment_user_action_time"
        app:layout_constraintLeft_toLeftOf="@+id/right_part"
        app:layout_constraintRight_toRightOf="parent">
        <TextView
            android:id="@+id/tv_last_forward_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/fl_icon"
            android:includeFontPadding="false"
            android:maxLines="2"
            android:ellipsize="end"
            android:gravity="left"
            android:textColor="@color/c_999999"
            android:textSize="@dimen/text_size_13" />
        <RelativeLayout
            android:id="@+id/fl_icon"
            android:layout_width="72dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="8dp">
            <com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/iv_icon"
                android:layout_width="72dp"
                android:layout_height="40dp"
                fresco:actualImageScaleType="centerCrop"
                fresco:placeholderImage="@color/c_f2f5f7"
                fresco:roundedCornerRadius="3dp" />
            <TextView
                android:id="@+id/tv_origin_title"
                style="@style/msg_box_content"
                tools:text="内容已删除" />
            <ImageView
                android:id="@+id/iv_play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:visibility="gone"
                android:scaleType="centerCrop"
                android:src="@drawable/message_icon_play" />
        </RelativeLayout>
    </RelativeLayout>
    <TextView
        android:id="@+id/tv_comment_user_action_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/c_999999"
        android:textSize="12sp"
        tools:text="1分钟前"
        android:layout_marginBottom="@dimen/dp_18"
        android:layout_marginTop="@dimen/dp_8"
        app:layout_constraintLeft_toLeftOf="@+id/right_part"
        app:layout_constraintBottom_toTopOf="@+id/line_bottom"/>
        android:id="@+id/line_bottom"
        style="@style/common_location_item_divider"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

在这里插入图片描述
tv_comment_user_action_time控件设置了marginTop 8dp,当时实际没有效果,但是mrginBottom是有效的。这是因为,tv_comment_user_action_time的约束是在line_bottom的上面,所以,marginBottom有效。tv_comment_user_action_time本身和rl_content没有约束,所以marginTop无效.

ConstraintSet

    private void changeLineView(boolean isFold) {
        ConstraintSet constraintSet = new ConstraintSet();
        constraintSet.clone(viewSubscribeBinding.constraintContainer);
        if (isFold) {
            constraintSet.connect(R.id.view_line, ConstraintSet.START, R.id.iv_fold, ConstraintSet.START);
        } else {
            constraintSet.connect(R.id.view_line, ConstraintSet.START, R.id.iv_fold, ConstraintSet.END);
        constraintSet.applyTo(viewSubscribeBinding.constraintContainer);

constraintSet.connect(R.id.view_line, ConstraintSet.START, R.id.iv_fold, ConstraintSet.START)
相当于view_line layout_constraintStart_toStartOf iv_fold

Barrier使用遇到的问题

<?xml version="1.0" encoding="utf-8"?>
<com.sohu.sohuvideo.ui.view.CustomLongClickConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    xmlns:rc="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/bg_color"
    android:id="@+id/ll_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="@dimen/dp_15">
    <RelativeLayout
        android:id="@+id/rl_user_container"
        android:layout_width="@dimen/dp_45"
        android:layout_height="@dimen/dp_45"
        android:layout_marginTop="@dimen/dp_18"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent">
        <com.sohu.sohuvideo.ui.template.vlayout.view.RCFramLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="1dp"
            rc:top="45dp"
            rc:bottom="45dp">
            <com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/iv_user_icon"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                fresco:actualImageScaleType="centerCrop"
                fresco:placeholderImage="@drawable/msg_list_item_user"
                fresco:placeholderImageScaleType="centerInside"
                fresco:roundAsCircle="true" />
        </com.sohu.sohuvideo.ui.template.vlayout.view.RCFramLayout>
        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/iv_user_icon_id"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:visibility="gone"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            fresco:actualImageScaleType="centerCrop" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/rl_user_action_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/dp_10"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="@dimen/dp_18"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/rl_user_container"
        app:layout_constraintRight_toLeftOf="@+id/iv_god">
        <TextView
            android:id="@+id/tv_comment_god_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:includeFontPadding="false"
            android:textColor="@color/c_999999"
            android:textSize="13sp"
            tools:text="恭喜!你的评论已被小编评选为‘神评’,继续加油发布更优质的评论吧恭喜!你的评论已被小编评选为‘神评’,继续加油发布更优质的评论吧" />
    </RelativeLayout>
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/iv_god"
        android:layout_width="70dp"
        android:layout_height="45dp"
        android:layout_centerInParent="true"
        android:contentDescription="@null"
        fresco:actualImageScaleType="centerCrop"
        android:layout_marginLeft="3dp"
        fresco:actualImageResource="@drawable/tag_comments_shenping"
        fresco:placeholderImageScaleType="centerCrop"
        android:layout_marginTop="@dimen/dp_8"
        android:layout_marginRight="@dimen/dp_15"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/rl_user_action_container" />
    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="bottom"
        app:constraint_referenced_ids="rl_user_action_container, iv_god"/>
    <RelativeLayout
        android:id="@+id/rl_comment_origin_content"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="18dp"
        android:background="@drawable/shape_msg_box_my_feed_comment_bg"
        android:padding="10dp"
        android:layout_marginTop="@dimen/dp_6"
        android:layout_marginRight="@dimen/dp_8"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/barrier"
        app:layout_constraintLeft_toLeftOf="@+id/rl_user_action_container">
        <TextView
            android:id="@+id/tv_comment_origin_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/c_999999"
            android:layout_toLeftOf="@+id/fl_icon"
            android:layout_centerVertical="true"
            android:maxLines="2"
            android:lineSpacingExtra="3dp"
            android:ellipsize="end"
            android:textSize="13sp"
            tools:text="花落知多少:我来不及认真地年轻,待明白过来时,只能选择认真地老去。或许,我们终究会有那么一天:牵着别人的手,遗忘曾经的他。" />
        <RelativeLayout
            android:id="@+id/fl_icon"
            android:layout_width="72dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="8dp">
            <com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/iv_icon"
                android:layout_width="72dp"
                android:layout_height="40dp"
                fresco:actualImageScaleType="centerCrop"
                fresco:placeholderImage="@color/c_e4e7ea"
                fresco:roundedCornerRadius="3dp" />
            <TextView
                android:id="@+id/tv_origin_title"
                style="@style/msg_box_content"
                tools:text="萌宠~萌宠宠萌的一天" />
            <ImageView
                android:id="@+id/iv_play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:scaleType="centerCrop"
                android:src="@drawable/message_icon_play" />
        </RelativeLayout>
    </RelativeLayout>
    <TextView
        android:id="@+id/tv_comment_user_action_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/c_999999"
        android:textSize="12sp"
        tools:text="1分钟前"
        android:layout_marginTop="@dimen/dp_6"
        android:layout_marginBottom="@dimen/dp_18"
        app:layout_constraintTop_toBottomOf="@+id/rl_comment_origin_content"
        app:layout_constraintLeft_toLeftOf="@+id/rl_user_action_container"
        app:layout_constraintBottom_toTopOf="@+id/line_bottom"/>
        android:id="@+id/line_bottom"
        style="@style/common_location_item_divider"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>
</com.sohu.sohuvideo.ui.view.CustomLongClickConstraintLayout>

在这里插入图片描述
遇到一个奇怪的问题,是Barrier时,文字变成时,Barrier定位的位置总是不对,会导致UI重叠,图片变高就没事。我感觉,是Barrier对文字计算高度支持有问题。
只能换一种解决方案

<?xml version="1.0" encoding="utf-8"?>
<com.sohu.sohuvideo.ui.view.CustomLongClickConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    xmlns:rc="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/bg_color"
    android:id="@+id/ll_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="@dimen/dp_15">
    <RelativeLayout
        android:id="@+id/rl_user_container"
        android:layout_width="@dimen/dp_45"
        android:layout_height="@dimen/dp_45"
        android:layout_marginTop="@dimen/dp_18"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent">
        <com.sohu.sohuvideo.ui.template.vlayout.view.RCFramLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="1dp"
            rc:top="45dp"
            rc:bottom="45dp">
            <com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/iv_user_icon"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                fresco:actualImageScaleType="centerCrop"
                fresco:placeholderImage="@drawable/msg_list_item_user"
                fresco:placeholderImageScaleType="centerInside"
                fresco:roundAsCircle="true" />
        </com.sohu.sohuvideo.ui.template.vlayout.view.RCFramLayout>
        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/iv_user_icon_id"
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:visibility="gone"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            fresco:actualImageScaleType="centerCrop" />
    </RelativeLayout>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/upLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/dp_10"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/rl_user_container">
        <RelativeLayout
            android:id="@+id/rl_user_action_container"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginTop="@dimen/dp_18"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@+id/iv_god">
            <TextView
                android:id="@+id/tv_comment_god_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:includeFontPadding="false"
                android:textColor="@color/c_999999"
                android:textSize="13sp"
                tools:text="恭喜!你的评论已被小编评选为‘神评’,继续加油发布更优质的评论吧恭喜!你的评论已被小编评选为‘神评’,继续加油发布更优质的评论吧" />
        </RelativeLayout>
        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/iv_god"
            android:layout_width="70dp"
            android:layout_height="45dp"
            android:layout_centerInParent="true"
            android:contentDescription="@null"
            fresco:actualImageScaleType="centerCrop"
            android:layout_marginLeft="3dp"
            fresco:actualImageResource="@drawable/tag_comments_shenping"
            fresco:placeholderImageScaleType="centerCrop"
            android:layout_marginTop="@dimen/dp_8"
            android:layout_marginRight="@dimen/dp_15"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/rl_user_action_container"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
    <RelativeLayout
        android:id="@+id/rl_comment_origin_content"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="18dp"
        android:background="@drawable/shape_msg_box_my_feed_comment_bg"
        android:padding="10dp"
        android:layout_marginTop="@dimen/dp_6"
        android:layout_marginRight="@dimen/dp_8"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/upLayout"
        app:layout_constraintLeft_toLeftOf="@+id/upLayout">
        <TextView
            android:id="@+id/tv_comment_origin_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/c_999999"
            android:layout_toLeftOf="@+id/fl_icon"
            android:layout_centerVertical="true"
            android:maxLines="2"
            android:lineSpacingExtra="3dp"
            android:ellipsize="end"
            android:textSize="13sp"
            tools:text="花落知多少:我来不及认真地年轻,待明白过来时,只能选择认真地老去。或许,我们终究会有那么一天:牵着别人的手,遗忘曾经的他。" />
        <RelativeLayout
            android:id="@+id/fl_icon"
            android:layout_width="72dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="8dp">
            <com.facebook.drawee.view.SimpleDraweeView
                android:id="@+id/iv_icon"
                android:layout_width="72dp"
                android:layout_height="40dp"
                fresco:actualImageScaleType="centerCrop"
                fresco:placeholderImage="@color/c_e4e7ea"
                fresco:roundedCornerRadius="3dp" />
            <TextView
                android:id="@+id/tv_origin_title"
                style="@style/msg_box_content"
                tools:text="萌宠~萌宠宠萌的一天" />
            <ImageView
                android:id="@+id/iv_play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:scaleType="centerCrop"
                android:src="@drawable/message_icon_play" />
        </RelativeLayout>
    </RelativeLayout>
    <TextView
        android:id="@+id/tv_comment_user_action_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/c_999999"
        android:textSize="12sp"
        tools:text="1分钟前"
        android:layout_marginTop="@dimen/dp_6"
        android:layout_marginBottom="@dimen/dp_18"
        app:layout_constraintTop_toBottomOf="@+id/rl_comment_origin_content"
        app:layout_constraintLeft_toLeftOf="@+id/upLayout"
        app:layout_constraintBottom_toTopOf="@+id/line_bottom"/>
        android:id="@+id/line_bottom"
        style="@style/common_location_item_divider"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>
</com.sohu.sohuvideo.ui.view.CustomLongClickConstraintLayout>

ConstrainLayout中使用ViewStub的问题

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ViewStub
                android:id="@+id/vs_flat"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout="@layout/chat_include_flat_emoji"
                android:visibility="gone"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/srf"/>
            <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
                android:id="@+id/srf"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintBottom_toTopOf="@+id/vs_flat">
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/conversation_recyclerview"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingTop="@dimen/dp_15"
                    android:clipToPadding="false" />
            </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
                android:id="@+id/transparent_mask_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/transparent"
                android:visibility="gone" />
        </androidx.constraintlayout.widget.ConstraintLayout>

上面这样写最终运行RecyclerView展示不出来
在这里插入图片描述
如图上面修改一下,rv_flat_emoji id是ViewStub实际引用布局的最外层的id。运行后效果对了,可是IDE标红这里也不对。

最后,改成直接不用ViewStub

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rv_flat_emoji"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout="@layout/chat_include_flat_emoji"
                android:paddingBottom="@dimen/dp_7"
                android:visibility="gone"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/srf"/>
            <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
                android:id="@+id/srf"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintBottom_toTopOf="@+id/rv_flat_emoji">
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/conversation_recyclerview"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingTop="@dimen/dp_15"
                    android:clipToPadding="false" />
            </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
                android:id="@+id/transparent_mask_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/transparent"
                android:visibility="gone" />
        </androidx.constraintlayout.widget.ConstraintLayout>

约束布局ConstraintLayout看这一篇就够了
哲♂学三幻神带你学习ConstraintLayout(约束布局)
解决ConstraintLayout 与ScrollView 嵌套时ScrollView 内容没有完全显示

ConstraintLayout使用过程中遇到问题记录 android:layout_width="0dp"效果是一样的,可以自动充满剩余空间约束布局ConstraintLayout看这一篇就够了哲♂学三幻神带你学习ConstraintLayout(约束布局)......
layout_constraintHorizontal_chainStyle 和layout_constraintVertical_chainStyle 三个属性值用法相同, 以横向为例用法如下: <Button android:id="@+id/text1" android:layout_width="wrap_content"
Android ConstraintLayout的一些特性的示例, 基于androidx.constraintlayout:constraintlayout:2.0.0-beta6, 详见我的博客: https://blog.csdn.net/EthanCo/article/details/105722610
自己参考写了一个demo 顺便说下自己的思路,之前一直以为约束布局它是拖拽类型的每次都是直接删除掉了 这次自己把它理解为相对布局,但是不是说是, android:layout_marginLeft="20dp" 这个相对左边在约束布局中写 app:layout_constraintLeft_toLeftOf="parent" 才会移动,自己的理解为约束布局的左边相对于父布局的左边, 如果距离顶部, 就会用约束布局的顶部相对于父布局的顶部,这个才会达到移动 相对于某个位置的在什么什么地方情况类似, 例如demo中tv1的顶部位于banner底部,tab1的左边位于tab2的右边,这个都是相对的, 自己按照这个理解约束布局就很简单了,写的时候可以写后面的,to+(R,L,B,T)这是个位置能更好的提示,然后就会有提示,
app:layout_constrainedWidth="true" 作用:使得该view的宽受限于他的约束 app:layout_constrainedHeight="true"同理 一个wrapcontent的view 的宽度随着内容变多最终是等于parent的宽度的 但实际上它的宽度不应改如此 eg1: 水平方向上 v1 leftToLeft = parent ,rightToLeft = v2 而v2 rightToRight = p Visibility behavior (可见性的表现) ConstraintLayout对可见性被标记View.GONE的控件(后称“GONE控件”)有特殊的处理。一般情况下,GONG控件是不可见的,且不再是布局的一部分,但是在布局计算上,ConstraintLayout与传统布局有一个很重要的区别: 传统布局下,GONE控件的尺寸会被认为是0(当做点来处理) 在ConstraintLayout中,GONE控件尺寸仍然按其可见时的大小计算,但是其外边距大小按0计算 这种特殊的行为让我们在无
可能你觉得ConstraintLayout属性多,且属性长而弃用它,那你错失了这个大宝贝。 因为在复杂布局,我们会一直用RelativeLayout和LinearLayout去嵌套,因为嵌套的ViewGroup会导致手机多次测量和绘制,从而影响性能,如果嵌套严重可能出现掉帧或卡顿。 使用ConstraintLayout一招入魂。一句话概括是:传统布局能实现的,它能轻松实现实现。传统布局不能实现的,它也能实现。 一、为什么要用呢? 这里举个2个简单的例子。 1.1、例1 如图下图所示,我们分别用Relativ
在这里我要向大家介绍ConstraintLayout,它是一种布局方法,可以帮助我们在对Android进行布局时减少对布局层次的嵌套,进而提高app的性能。 接下来我会通过一些示例来全面介绍ConstraintLayout使用方式与它的一些特性。希望能够帮助正在学习ConstraintLayout使用的同学们。 ConstraintLayout VS RelativeLayout 相信当我们进行布局的时候,使用最多的应该是LinearLayout与RelativeLayout。而对于复杂一点
在传统布局方式中,如果要改变某个控件的位置,需要获取 LayoutParams , 后台修改属性值就行了。 但是在约束布局 ConstraintLayout 中,要改变控件的约束条件,需要用到 ConstraintSet 类。主要有 5 个步骤 第一步:创建 ConstraintSet() 实例 val set = ConstraintSet() 第二步:需要复制一份父布局的约束,方法有三个如下 set.clone(constraintLayout: ConstraintLayout);
ConstraintLayout使用权重可以通过设置一个 View 的宽度或高度为 0dp,然后再设置该 View 的 layout_constraintWidth_percent 或 layout_constraintHeight_percent 属性来实现。 例如,假设有两个水平方向的 View,我们想让它们平分父布局的宽度,可以按照以下方式设置: android:id="@+id/view1" android:layout_width="0dp" android:layout_height="match_parent" app:layout_constraintWidth_percent="0.5" /> android:id="@+id/view2" android:layout_width="0dp" android:layout_height="match_parent" app:layout_constraintWidth_percent="0.5" app:layout_constraintStart_toEndOf="@+id/view1" /> 其中,view1 和 view2 的宽度都被设置为 0dp,然后通过设置 layout_constraintWidth_percent 属性为 0.5,让它们各占父布局宽度的一半。同样,垂直方向的布局也可以使用相同的方式设置。