ConstraintLayout使用

343 阅读1分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

简介

ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用。

背景

在项目中经常有比较复杂的布局, 甚至有些布局使用RelativeLayout或者LinearLayout会使层次嵌套的比较深, 会大大的影响UI渲染的速度. 这个时候使得UI的性能优化显得尤为重要

使用

<?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="@color/white">

    <Button
        android:id="@+id/btn_center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:text="居中"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:text="居上"
        android:layout_marginBottom="15dp"
        app:layout_constraintBottom_toTopOf="@id/btn_center"
        app:layout_constraintLeft_toLeftOf="@id/btn_center"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:text="居右"
        android:layout_marginStart="15dp"
        app:layout_constraintTop_toTopOf="@id/btn_center"
        app:layout_constraintLeft_toRightOf="@id/btn_center"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:text="居下"
        android:layout_marginTop="15dp"
        app:layout_constraintTop_toBottomOf="@id/btn_center"
        app:layout_constraintRight_toRightOf="@id/btn_center"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:text="居左"
        android:layout_marginEnd="15dp"
        app:layout_constraintBottom_toBottomOf="@id/btn_center"
        app:layout_constraintRight_toLeftOf="@id/btn_center"/>
</androidx.constraintlayout.widget.ConstraintLayout>

image.png

常用属性

app:layout_constraintTop_toBottomOf控件的顶部与目标的底部对齐,可以设置的值为目标控件的id app:layout_constraintBottom_toTopOf控件的底部和目标的顶部对齐,可以设置的值为目标控件的id app:layout_constraintRight_toLeftOf控件的右边与目标的左边对齐,可以设置的值为目标控件的id app:layout_constraintLeft_toRightOf控件的左边与目标的右边对齐,可以设置的值为目标控件的id app:layout_constraintStart_toStartOf控件的左边与目标的左边对齐,可以设置的值为parent或者目标控件的id app:layout_constraintEnd_toEndOf控件的右边与目标的右边对齐,可以设置的值为parent或者目标控件的id app:layout_constraintEnd_toStartOf控件的右边与目标的左边对齐,可以设置的值为目标控件的id app:layout_constraintStart_toEndOf控件的左边与目标的右边对齐,可以设置的值为目标控件的id