安卓中的 0dp 和 match_parent 的區別?
第一章 前言
有段時間,看到同事在編寫代碼的時候,寫到的是 0dp 有時候自己寫代碼的時候,編寫的是 match_parent 發現有時候效果很類似。
后來通過一個需求案例,才發現兩者有著非常明顯的區別。
我現在 AI 上面問了一次,兩者的區別,給出的表格如下:
特性 | match_parent | 0dp |
---|---|---|
依賴權重 | 不依賴,直接匹配父容器,必須結合 weight 使用 | 依賴權重 |
布局行為 | 適用于所有的布局 | 大多數出現在 LinearLayout 其實 ConstraintLayout 中也能生效 |
行為 | 填滿父容器剩余的空間 | 按照權重分配剩余的空間 |
默認效果 | 獨立生效 | 不設置 weight 時,尺寸為0 不可見(在LinearLayout當中) |
第二章 案例需求
遇到的案例
定義一個 約束布局(ConstraintLayout)實現一個 自定義 輸入框的效果:
目標效果圖
案例1:采用 match_parent 編寫
案例代碼
<androidx.constraintlayout.widget.ConstraintLayoutandroid: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.AppCompatTextViewandroid: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.AppCompatEditTextandroid: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.ConstraintLayoutandroid: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.AppCompatTextViewandroid: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.AppCompatEditTextandroid: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
能夠進行更好的適配。