1. 三种测量方式(不要用match_parent)
固定宽高Fixed(~dp) | 适应内容wrap_content | 匹配父布局match_constraint(0dp) |
---|---|---|
写死多少dp | 适应内容 | view会尽力延展以适应每一侧的约束,但可以通过下面的属性修改 |
layout_constraintWidth_default
layout_constraintWidth_min
layout_constraintWidth_max
2. 设置宽高比(Set size as a ratio)
<ImageView
android:id="@+id/imageView2"
android:layout_width="200dp"
android:layout_height="0dp"
android:layout_marginTop="156dp"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher_background"
app:layout_constraintDimensionRatio="h,16:9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
(W200,H0) - (h,16:9) | (W200,H0) - (w,16:9) | (W0,H200) - (h,16:9) | (W0,H200) - (w,16:9) |
---|---|---|---|
① 宽固定时使用(h,16:9),高固定时使用(w,16:9),代表宽高比;
② 使用dimensionRatio一个边要设置为match_constraint,一个边是固定大小
3. margin goneMargin
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#300000ff"
android:orientation="vertical">
<ImageView
android:id="@+id/banner"
android:layout_width="0dp"
android:layout_height="100dp"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/guide_tv"
android:layout_width="0dp"
android:layout_height="50dp"
android:background="#D5FF9D"
android:gravity="center"
android:text="一行文案"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/banner"
app:layout_goneMarginTop="10dp"/>
<ListView
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FFADAD"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/guide_tv"
app:layout_goneMarginTop="10dp" />
<!--
要求:
1、有这行文案就没有间距
2、没有这行文案就要间距占位
-->
</androidx.constraintlayout.widget.ConstraintLayout>
关注下面的“一行文案”视图
banner展示时 | banner gone掉时 |
---|---|
总结
① goneMargin 的含义是,我约束到的view变成gone了,我的margin是多少,所以前提是可以设置margin的才有goneMargin;
② 对其他视图有约束才能设置margin!没有约束或者不对位置产生影响的约束无法设置margin;比如banner marginBottom是不生效的。guide_tv marginTop生效,因为是对位置有效的约束。
③ goneMargin是给自己设置的,不是给gone掉的视图设。goneMargin理解成和margin一样,区别是goneMargin在约束gone掉才生效;
网友评论