安卓中的 0dp 和 match_parent 的区别?
第一章 前言
有段时间,看到同事在编写代码的时候,写到的是 0dp 有时候自己写代码的时候,编写的是 match_parent 发现有时候效果很类似。
后来通过一个需求案例,才发现两者有着非常明显的区别。
我现在 AI 上面问了一次,两者的区别,给出的表格如下:
| 特性 | match_parent | 0dp | 
|---|---|---|
| 依赖权重 | 不依赖,直接匹配父容器,必须结合 weight 使用 | 依赖权重 | 
| 布局行为 | 适用于所有的布局 | 大多数出现在 LinearLayout 其实 ConstraintLayout 中也能生效 | 
| 行为 | 填满父容器剩余的空间 | 按照权重分配剩余的空间 | 
| 默认效果 | 独立生效 | 不设置 weight 时,尺寸为0 不可见(在LinearLayout当中) | 
第二章 案例需求
遇到的案例
定义一个 约束布局(ConstraintLayout)实现一个 自定义 输入框的效果:
目标效果图

 
案例1:采用 match_parent 编写
案例代码
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_edit_text"
        android:layout_margin="10dp"
        android:padding="15dp">
        <!--
            app:layout_constraintBottom_toBottomOf="parent"  控件底部和父控件底部对齐
            app:layout_constraintStart_toStartOf="parent"  控件左侧和父控件左侧对齐
            app:layout_constraintTop_toTopOf="parent"  控件顶部和父控件顶部对齐
        -->
        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/text_view_describe"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/green"
            android:text="姓名"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <!--
            app:layout_constraintEnd_toEndOf="parent"  控件右侧和父控件右侧对其
            app:layout_constraintStart_toEndOf="@id/text_view_describe"  控件左侧和 text_view_describe 控件右侧对齐
        -->
        <androidx.appcompat.widget.AppCompatEditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/yellow"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/text_view_describe" />
    </androidx.constraintlayout.widget.ConstraintLayout>

案例2:采用 0dp 编写
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_edit_text"
        android:layout_margin="10dp"
        android:padding="15dp">
        <!--
            app:layout_constraintBottom_toBottomOf="parent"  控件底部和父控件底部对齐
            app:layout_constraintStart_toStartOf="parent"  控件左侧和父控件左侧对齐
            app:layout_constraintTop_toTopOf="parent"  控件顶部和父控件顶部对齐
        -->
        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/text_view_describe"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/green"
            android:text="姓名"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <!--
            app:layout_constraintEnd_toEndOf="parent"  控件右侧和父控件右侧对其
            app:layout_constraintStart_toEndOf="@id/text_view_describe"  控件左侧和 text_view_describe 控件右侧对齐
        -->
        <androidx.appcompat.widget.AppCompatEditText
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="@color/yellow"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/text_view_describe" />
    </androidx.constraintlayout.widget.ConstraintLayout>

 
因此,这里需要注意的是 0dp 和 match_parent 是存在区别的,
 1、不仅仅在于 线性布局 LinearLayout 当中使用。
 2、在约束布局当中, 0dp 能够进行更好的适配。



















