Saya ingin membatasi sisi kiri dan kanan View ke margin tampilan induknya dan membuatnya mengisi ruang yang dialokasikan. Namun, mengatur lebar ke salah satu match_parent
atau wrap_content
tampaknya menghasilkan hasil yang sama.
Apakah ada sesuatu yang setara dengan match_constraints (berbeda dengan match_parent dan wrap_content)? Apakah match_parent
dan wrap_content
memengaruhi tata letak atau diabaikan dalam tata letak batasan baru?
Saya menyukai sistem tata letak baru ini untuk platform favorit saya!
match_parent
tidak berhasil untuk Anda?Jawaban:
match_parent
tidak didukung. Dengan0dp
, Anda dapat menganggap batasan Anda sebagai 'terukur' daripada 'mengisi apa yang tersisa'.Juga,
0dp
dapat ditentukan oleh posisi, di manamatch_parent
bergantung pada induknya untuk posisinya (x, y dan lebar, tinggi)sumber
match_parent
tidak diizinkan. Tapi Anda sebenarnya bisa menyetel lebar dan tinggi ke 0dp dan menyetel batasan atas dan bawah atau kiri dan kanan ke "induk".Jadi misalnya jika Anda ingin memiliki
match_parent
batasan pada lebar elemen, Anda dapat melakukannya seperti ini:<TextView android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
sumber
Ternyata
match_parent
adalah:ConstraintLayout
ConstraintLayout
Jadi jika Anda membutuhkan tampilan Anda berfungsi sebagai
match_parent
, maka:ConstraintLayout
harus menggunakan0dp
match_parent
Contoh:
<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="16dp"> <android.support.design.widget.TextInputLayout android:id="@+id/phoneNumberInputLayout" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"> <android.support.design.widget.TextInputEditText android:id="@+id/phoneNumber" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout>
sumber
match_parent
tidak didukung olehConstraintLayout
. Setel lebar0dp
agar sesuai dengan batasan.sumber
Dari dokumen resmi :
Jadi jika Anda ingin mencapai
MATCH_PARENT
efek, Anda dapat melakukan ini:<TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:text="TextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
sumber
Anda dapat memeriksa Adaptor Anda.
1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater); 2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);
Saya memiliki masalah yang sama seperti Anda ketika saya menggunakan 1. Anda dapat mencoba 2.
sumber
Untuk membuat view anda sebagai match_parent tidak bisa dilakukan secara langsung, tapi kita bisa melakukannya dengan cara yang sedikit berbeda, tapi jangan lupa untuk menggunakan atribut Left dan Right dengan Start dan End, karena jika menggunakan RTL support akan dibutuhkan.
<Button android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
sumber
atur lebar atau tinggi (apa pun yang Anda butuhkan untuk mencocokkan induk) ke 0dp dan atur margin kiri, kanan, atas, bawah untuk bertindak sebagai orang tua yang cocok
sumber
di dokumen kantor: https://developer.android.com/reference/android/support/constraint/ConstraintLayout
Saat dimensi disetel ke MATCH_CONSTRAINT, perilaku default adalah membuat ukuran yang dihasilkan mengambil semua ruang yang tersedia.
Menggunakan 0dp, yang setara dengan "MATCH_CONSTRAINT"
Penting: MATCH_PARENT tidak disarankan untuk widget yang terdapat dalam ConstraintLayout. Perilaku serupa dapat didefinisikan dengan menggunakan MATCH_CONSTRAINT dengan batasan kiri / kanan atau atas / bawah yang sesuai ditetapkan ke "induk"
sumber
Jika Anda ingin TextView di tengah induk ..
Tata letak utama Anda adalah Constraint Layout
<androidx.appcompat.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/logout" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:gravity="center"> </androidx.appcompat.widget.AppCompatTextView>
sumber
Saya menemukan satu jawaban lagi ketika ada tata letak kendala di dalam tampilan gulir yang perlu kita letakkan
android:fillViewport="true"
ke tampilan gulir
dan
android:layout_height="0dp"
dalam tata letak batasan
Contoh:
<?xml version="1.0" encoding="utf-8"?> <ScrollView 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:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="0dp"> // Rest of the views </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView>
sumber