В чем разница между 0 dp и wrap_content при использовании макета ограничения? Это проблема эффективности? Я уже пробовал использовать их оба, но я просто не понимаю, в чем разница.
На самом деле 0dp занимает в нем width/height ограниченные области, тогда как wrap_content принимает все, что требуется для хранения его содержимого.
0dp
width/height
wrap_content
<?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:padding="16dp"> <Button android:id="@+id/button_wrap" android:text="Wrap Button" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/button_0dp" android:text="0dp Button" app:layout_constraintTop_toBottomOf="@+id/button_wrap" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_width="0dp" android:layout_height="wrap_content"/> </androidx.constraintlayout.widget.ConstraintLayout>
Вывод:
В приведенном выше примере
Button
Содержимое переноса в основном занимает именно то место, которое ему нужно, а ширина 0dp означает, что по ширине он меньше размера 0dp. Лучше понять, просто изменить размер ширины, я имею в виду 0 на верхнее значение
Основное отличие состоит в том, что wrap_content будет учитывать только его размер и не будет использовать ограничения, связанные с ним.
При 0dp будут использоваться ограничения.