Saya bingung tentang perbedaan antara ConstraintLayout
dan RelativeLayout
. Bisakah seseorang tolong beri tahu saya perbedaan yang tepat di antara mereka?
219
Saya bingung tentang perbedaan antara ConstraintLayout
dan RelativeLayout
. Bisakah seseorang tolong beri tahu saya perbedaan yang tepat di antara mereka?
RealtiveLayout
,LinearLayout
,GridLayout
dll) untuk mendapatkan tampilan hirarki yang mereka inginkan.Jawaban:
Tujuannya
ConstraintLayout
adalah untuk mengoptimalkan dan meratakan hierarki tampilan tata letak Anda dengan menerapkan beberapa aturan untuk setiap tampilan agar tidak bersarang.Aturan mengingatkan Anda tentang
RelativeLayout
, misalnya mengatur kiri ke kiri dari beberapa tampilan lainnya.Tidak seperti
RelativeLayout
,ConstraintLayout
menawarkanbias
nilai yang digunakan untuk memposisikan tampilan dalam hal 0% dan 100% horizontal dan vertikal offset relatif terhadap pegangan (ditandai dengan lingkaran). Persentase ini (dan fraksi) menawarkan posisi tampilan yang mulus di seluruh kepadatan dan ukuran layar yang berbeda.Pegangan dasar (pipa panjang dengan sudut bulat, di bawah pegangan lingkaran) digunakan untuk menyelaraskan konten tampilan dengan referensi tampilan lain.
Pegangan kotak (di setiap sudut tampilan) digunakan untuk mengubah ukuran tampilan dalam dps.
Ini sepenuhnya berdasarkan pendapat dan kesan saya tentang
ConstraintLayout
sumber
Layout Relatif dan Constraint Layout yang setara dengan properti
(1) Tata Letak Relatif:
(1) Setara Kendala setara:
(2) Tata Letak Relatif:
(2) Setara Kendala Setara:
(3) Tata Letak Relatif:
(3) Setara Kendala Setara:
(4) Tata Letak Relatif:
(4) Setara Kendala Setara:
(5) Tata Letak Relatif:
(5) Setara Kendala Setara:
(6) Tata Letak Relatif:
(6) Setara Kendala Setara:
(7) Tata Letak Relatif:
(7) Setara Kendala setara:
(8) Tata Letak Relatif:
(8) Setara Kendala Setara:
(9) Tata Letak Relatif:
(9) Setara Kendala Setara:
(10) Tata Letak Relatif:
(10) Setara Kendala Setara:
(11) Tata Letak Relatif:
(11) Setara Kendala Setara:
(12) Tata Letak Relatif:
(12) Setara Kendala Setara:
(13) Tata Letak Relatif:
(13) Setara Kendala Setara:
(14) Tata Letak Relatif:
(14) Setara Kendala Setara:
(15) Tata Letak Relatif:
(15) Setara Kendala Setara:
(16) Tata Letak Relatif:
(16) Setara Kendala Setara:
(17) Tata Letak Relatif:
(17) Setara Kendala setara:
(18) Tata Letak Relatif:
(18) Setara Kendala Setara:
(19) Tata Letak Relatif:
(19) Setara Kendala setara:
(20) Tata Letak Relatif:
(20) Setara Kendala setara:
(21) Tata Letak Relatif:
(21) Setara Kendala setara:
(22) Tata Letak Relatif:
(22) Setara Kendala setara:
sumber
Dilaporkan oleh kinerja @davidpbr
ConstraintLayout
Saya membuat dua layout 7-anak yang sama, masing-masing dengan orangtua
ConstraintLayout
danRelativeLayout
. Berdasarkan alat penelusuran metode Android Studio, tampaknyaConstraintLayout
menghabiskan lebih banyak waktu di onMeasure dan melakukan pekerjaan tambahan dionFinishInflate
.Perpustakaan yang digunakan (
support-v4
,appcompat-v7
...):com.android.support.constraint:constraint-layout:1.0.0-alpha1
Perangkat / versi Android direproduksi pada: Samsung Galaxy S6 (SM-G920A. Maaf, tidak ada atm Nexus). Android 5.0.2
Perbandingan penelusuran metode cepat:
Contoh repo Github: https://github.com/OnlyInAmerica/ConstraintLayoutPerf
sumber
Berikut ini perbedaan / keunggulannya:
Constraint Layout memiliki kekuatan ganda, baik Relative Layout maupun Linear Layout: Mengatur posisi relatif tampilan (seperti Layout Relative) dan juga mengatur bobot untuk UI dinamis (yang hanya mungkin dalam Linear Layout).
Penggunaan yang sangat kuat adalah pengelompokan elemen dengan membentuk rantai. Dengan cara ini kita dapat membentuk sekelompok tampilan yang secara keseluruhan dapat ditempatkan dengan cara yang diinginkan tanpa menambahkan lapisan hierarki lain hanya untuk membentuk kelompok tampilan lain.
Selain bobot, kita dapat menerapkan bias horizontal dan vertikal yang tidak lain adalah persentase perpindahan dari pusat. (Bias 0,5 berarti sejajar terpusat. Nilai apa pun yang kurang atau lebih berarti gerakan yang sesuai dalam arah masing-masing).
Fitur lain yang sangat penting adalah menghormati dan menyediakan fungsionalitas untuk menangani tampilan GONE sehingga tata letak tidak pecah jika beberapa tampilan diatur ke GONE melalui kode java. Lebih banyak dapat ditemukan di sini: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html#VisibilityBehavior
Memberikan kekuatan penerapan kendala otomatis dengan menggunakan cetak biru dan alat Editor Visual yang membuatnya mudah untuk merancang halaman.
Semua fitur ini mengarah pada perataan hierarki tampilan yang meningkatkan kinerja dan juga membantu dalam membuat UI yang responsif dan dinamis yang dapat lebih mudah beradaptasi dengan berbagai ukuran dan kepadatan layar.
Inilah tempat terbaik untuk belajar dengan cepat: https://codelabs.developers.google.com/codelabs/constraint-layout/#0
sumber
Perbedaan besar adalah bahwa ConstraintLayout menghargai kendala bahkan jika tampilan hilang. Jadi tidak akan merusak tata letak jika Anda memiliki rantai dan Anda ingin membuat tampilan menghilang di tengah.
sumber
Selain jawaban @ dhaval-jivani.
Saya telah memperbarui proyek github project ke versi terbaru dari layout kendala v.1.1.0-beta3
Saya telah mengukur dan membandingkan waktu metode onCreate dan waktu antara dimulainya onCreate dan akhir pelaksanaan metode preformDraw terakhir yang terlihat di monitor CPU. Semua tes dilakukan pada Samsung S5 mini dengan Android 6.0.1 Di sini hasil:
Awal baru (pembukaan layar pertama setelah peluncuran aplikasi)
Tata Letak Relatif
OnCreate: 123ms
Waktu preformDraw terakhir - Waktu OnCreate: 311.3ms
Tata Letak Kendala
OnCreate: 120,3ms
Waktu preformDraw terakhir - Waktu OnCreate: 310ms
Selain itu, saya telah memeriksa tes kinerja dari artikel ini , di sini kode dan menemukan bahwa pada loop menghitung kurang dari 100 varian tata letak kendala lebih cepat selama pelaksanaan menggembungkan, mengukur, dan tata letak kemudian varian dengan Relative Layout. Dan pada perangkat Android lama, seperti Samsung S3 dengan Android 4.3, perbedaannya lebih besar.
Sebagai kesimpulan saya setuju dengan komentar dari artikel :
sumber
Secara resmi,
ConstraintLayout
adalah jauh lebih cepatsumber
Pertanyaan sebenarnya adalah, apakah ada alasan untuk menggunakan tata letak selain tata letak kendala? Saya yakin jawabannya mungkin tidak.
Bagi mereka yang bersikeras bahwa mereka ditujukan untuk programmer pemula atau sejenisnya, mereka harus memberikan beberapa alasan bagi mereka untuk lebih rendah daripada tata letak lainnya.
Layout kendala lebih baik dalam segala hal (harganya sekitar 150 ribu dalam ukuran APK.). Mereka lebih cepat, mereka lebih mudah, mereka lebih fleksibel, mereka bereaksi lebih baik terhadap perubahan, mereka memperbaiki masalah ketika barang hilang, mereka menyesuaikan diri lebih baik untuk jenis layar yang sangat berbeda dan mereka tidak menggunakan banyak loop bersarang dengan panjang itu ditarik struktur pohon untuk semuanya. Anda dapat meletakkan apa saja di mana saja, sehubungan dengan apa pun, di mana saja.
Mereka agak kacau pada pertengahan 2016, di mana editor tata letak visual tidak cukup baik, tetapi mereka sampai pada titik bahwa jika Anda memiliki tata letak sama sekali, Anda mungkin ingin serius mempertimbangkan menggunakan tata letak kendala, bahkan ketika melakukan hal yang sama dengan
RelativeLayout
, atau bahkan sederhanaLinearLayout
.FrameLayouts
jelas masih punya tujuan. Tapi, saya tidak bisa melihat membangun apa pun pada saat ini. Jika mereka mulai dengan ini, mereka tidak akan menambahkan yang lain.sumber
Kesimpulan yang bisa saya buat adalah
1) Kita dapat melakukan desain UI tanpa menyentuh bagian kode xml , sejujurnya saya merasa google telah menyalin bagaimana UI dirancang di aplikasi iOS , masuk akal jika Anda terbiasa dengan pengembangan UI di iOS, tetapi dalam tata letak yang relatif sulit untuk mengatur kendala tanpa menyentuh desain xml .
2) Kedua memiliki hierarki tampilan datar tidak seperti tata letak lainnya, demikian juga kinerja yang lebih baik daripada tata letak relatif yang mungkin Anda lihat dari jawaban lain
3) Ia juga memiliki hal-hal tambahan selain dari tata letak relatif yang dimiliki, seperti penentuan posisi relatif melingkar di mana kita dapat memposisikan tampilan lain relatif terhadap yang ini pada radius tertentu dengan sudut tertentu yang tidak dapat dilakukan dalam tata letak relatif
Saya mengatakannya lagi, mendesain UI menggunakan layout kendala sama dengan mendesain UI di iOS, jadi di masa depan jika Anda bekerja di iOS Anda akan merasa lebih mudah jika Anda telah menggunakan layout kendala
sumber
Satu-satunya perbedaan yang saya perhatikan adalah bahwa hal-hal yang diatur dalam tata letak relatif melalui seret dan lepas secara otomatis memiliki dimensinya relatif terhadap elemen-elemen lain yang disimpulkan, jadi ketika Anda menjalankan aplikasi apa yang Anda lihat adalah apa yang Anda dapatkan. Namun dalam tata letak kendala bahkan jika Anda menarik dan melepas elemen dalam tampilan desain, ketika Anda menjalankan aplikasi hal-hal yang mungkin bergeser. Ini dapat dengan mudah diperbaiki dengan secara manual mengatur kendala atau, langkah yang lebih berisiko adalah dengan mengklik kanan elemen di pohon komponen, memilih sub menu tata letak kendala, lalu mengklik 'menyimpulkan kendala'. Semoga ini membantu
sumber