ConstraintLayout - 2. 设置大小(Adjus

2019-11-14  本文已影响0人  VittaWang
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掉才生效;

上一篇下一篇

猜你喜欢

热点阅读