Sebuah Panduan Menggunakan ConstraintLayout di Android Studio
Diterjemahkan dari A Guide to using ConstraintLayout in Android Studio
Seperti disebutkan di pembahasan sebelumnya, Google telah membuat perubahan yang cukup signifikan pada Android Studio Layout Editor, yang mayoritas ditambahkan untuk mendukung desain antarmuka menggunakan ConstraintLayout. Sekarang setelah konsep dasar ConstraintLayout kita bahas, saatnya sekarang kita pelajari bagaimana mengimplementasikannya untuk mendesain antarmuka menggunakan Layout Editor.
Design dan Layout Views
Pada bahasan berjudul “Sebuah Panduan untuk Android Studio Layout Editor Tool” (yang ini belum diterjemahkan) menjelaskan bahwa Android Studio Layout Editor memberikan dua cara untuk melihat antarmuka yang didesain dalam bentuk Design dan Layout (dikenal juga dengan nama blueprint) views. View-view ini dapat ditampilkan secara individu maupun bersamaan, seperti pada Gambar 25–1, yang tampil secara bersamaan:
Design view (berada di sebelah kiri gambar di atas) menampilkan suatu “what you see is what you get”, artinya apa yang kita lihat di sana akan ditampilkan saat aplikasi dijalankan. Layout view, sementara itu, hanya menampilkan blueprint dari suatu desain di mana setiap widget ditampilkan dalam bentuk kotak-kotak. Seperti yang bisa dilihat pada Gabamr 25–1 di atas, Layout view juga menampilkan koneksi constraint (dalam kasus di atas terdapat opposing constriant yang memosisikan sebuah button di tengah layar). Constraint-constraint tersebut akan diperjelas di dalam Design view saat widget tertentu terpilih atau pointer mouse berada di atasnya seperti yang digambarkan Gambar 25–2:
Tampilan koneksi constraint di kedua views bisa diubah menggunakan menu toolbar yang ada di Gambar 25–3:
Selain dua mode untuk menampilkan layout antarmuka tadi, Layout Editor tool juga memberikan tiga cara berbeda untuk mengatur bagaimana koneksi constraint suatu layout ditentukan.
Autoconnect Mode
Autoconnect, sesuai namanya, akan secara otomatis memberikan koneksi constriant saat suatu widget ditambahkan ke dalam layout. Mode autoconnect dapat diaktifkan maupun dinonaktifkan menggunakan tombol toolbar seperti pada Gambar 25–4:
Mode autoconnect menggunakan algoritma untuk menentukan constraint yang paling cocok untuk diberikan berdasarkan lokasi sisi suatu widget terhadap parent layout-nya saat ditambahkan. Jika pemberian koneksi otomatis tidak sesuai harapan, nantinya kita bisa mengubah koneksi constraint tersebut secara manual.
Inference Mode
Inference mode menggunakan metode heuristic yang terdiri atas algoritma dan kemungkinan-kemungkinan lain untuk memosisikan suatu widget secara otomatis setelah widget tersebut ditambahkan ke layout. Mode ini biasanya dipakai ketia fitur Autoconnect sudah dimatikan dan objek yang ditambahkan ke layout tidak memiliki constraint apapun. Fitur ini memungkinkan suatu layout untuk didesain hanya dengan drag and drop widget ke canvas layout dengan merubah ukuran atau posisinya saat dibutuhkan. Secara sederhana, metode ini membuat kita bisa mendesain layout suatu aplikasi tanpa perlu memilikirkan koneksi constriant-nya. Mode inference dapat dipakai kapanpun untuk memberikan constraint pada widget-widget yang belum memilikinya.
Constraint dapat diberikan secara otomatis ke sebuah layout ketika tombol Infer constraint (Gambar 25–5) di klik:
Sama seperti mode Autoconnect, akan selalu ada kemungkinan Layout Editor untuk memberikan constraint yang tidak sesuai, sehingga harus dimodifikasi dan diperbaiki secara manual.
Mengatur Constraint Secara Manual
Opsi ketiga untuk memberikan koneksi constraint ialah dengan memberikannya secara manual. Saat memberikan koneksi constraint secara manual di Layout Editor, ada beberapa hal yang perlu diketahui. Perhatikan contoh widget pada Gambar 25–6 berikut:
Garis zigzag (A) merupakan koneksi constraint yang menghubungkan sisi suatu widget ke sebuah target. Kotak kecil (B) di setiap sudut objek merupakan resize handle yang saat diklik dan ditarik akan mengubah ukuran widget. Lingkaran kecil (C) yang ada di setiap sisi merupakan constraint anchor (pemegang constraint). Untuk memberikan koneksi constriant, klik pada anchor, tahan, lalu tarik ke elemen yang diinginkan (misalnya guideline, salah satu sisi parent atau salah satu sisi widget lain) seperti pada Gambar 25–7. Saat memberikan koneksi ke salah satu sisi widget lain, cukup drag dari anchor ke anchor salah satu sisi widget lain hingga berwarna hijau, lalu lepas klik mouse.
Selain anchor pada sisi suatu widget, terdapat anchor tambahan untuk menandakan baseline constriant pada konten yang ada di dalam widget tersebut. Untuk menampilkan tanda ini, cukup klik saja button yang ada tulisan ‘ab’ (ditunjuk oleh penanda D pada Gambar 25–6). Untuk memberikan koneksi constriant dari suatu handle baseline constraint, cukup arahkan mouse ke atas handle sampai berkedip sebelum mengklik dan menariknya ke tujuan (misalnya ke baesline anchor widget lain seperti pada Gambar 25–8). Saat baseline anchor tujuan berwarna hijau, lepas tombol mouse:
Untuk menyembunyikan baseline anchor, klik lagi baseline button untuk yang kedua kalinya.
Menambahkan Constraint di Panel Inspector
Constraint dapat pula di tambahkan ke sebuah view di dalam Android Studio Layout Editor menggunakan panel Inspector yang ada di jendela Attributes seperti pada Gambar 25–9. Kotak yang berada di tengah merepresentasikan view yang saat ini sedang terpilih dan area disekitarnya adalah constraint yang aktif di view tersebut:
Ketidakhadiran dari suatu constraint di salah satu sisi view dapat dilihat dari titik-titik diserta lingkaran biru dengan tanda plus (pada contoh di atas yaitu pada sisi bagian bawah). Untuk menambah constraint, cukup klik pada lingkaran biru ini dan layout editor akan menambahkan sebuah constraint ke view yang paling cocok menurutnya.
Menghapus Constraints
Untuk menghapus suatu constraint, cukup klik anchor yang sedang aktif. Constraint selanjutnya akan di hapus dari layout (saat mouse di arahkan ke atas anchor ia akan berubah menjadi merah yang menyatakan bahwa saat di klik ia akan menghapus anchor tersebut).
Jika ingin menghapus seluruh constraint sekaligus maka klik salah satu widget lalu klik tombol Delete All Constraints yang akan muncul di sebelah widget terpilih seperti pada Gambar 25–11:
Untuk menghapus seluruh constraint dari seluruh widget yang ada di layout, gunakan tombol toolbar yang ditunjukkan oleh Gambar 25–12:
Mengatur Constraint Bias
Di bab sebelumnya, kita sudah membahas bagaimana memberikan suatu bais dengan memanfaatkan opposing constraint di suatu widget. Constraint bias dapat diatur di dalam Android Studio Layout Editor menggunakan Inspector yang ada di jendela Attributes seperti pada Gambar 25–13. Dua slider yang ditunjuk oleh panah akan mengatur bias vertikal dan horizontal pada widget yang sedang terpilih.
Margin Constraint dapat digunakan untuk melengkapi margin sehingga bisa memberikan jarak antar elemen. Perhatikan horizontal constraint yang diberikan pada objek Button di Gambar 25–14:
Seperti yang sudah diatur sebelumnya, horizontal constraint membuat posisi objek relatif pada parent ConstraintLayout-nya. Oleh karena itu, widget tersebut memiliki opposing horizontal constraint sehingga posisinya kini berada di tengah. Karena fitur ini, layout memiliki fleksibilitas untuk mengakomodasi ukuran layar yang berbeda juga orientasi layar yang berbeda. Pengaturan horizontal bias juga dapat mengontrol posisi widget sampai ke ujung layar. Contohnya pada Gambar 25–15, memperlihatkan button dengan 100% horizontal bias:
Margin ConstraintLayout akan diberikan di akhir ujung constraint dan memberikan jarak berukuran tetap dimana bias tidak akan bisa melampauinya. Pada Gambar 25–16, constraint sisi sebelah kanan memiliki margin 50dp meskipun horizontal biasnya tetap 100%.
Nilai margin yang ada pada suatu widget dapat dimodifikasi dari dalam Inspector. Seperti pada Gambar 25–17, sebuah menu dropdown dipakai untuk mengubah margin di sisi kanan widget terpilih menjadi 16dp. Selain itu, kita juga bisa mengubahnya dengan mengetikkan langsung nilai yang diinginkan di kotak yang tersedia.
Margin bawaan untuk setiap constriant baru dapat diubah kapanpun melalui opsi pada toolbar yang ditunjuk oleh panah pada Gambar 25–18:
Pentingnya opposing constraint, bias, serta margin telah dibahas di bab sebelumnya yang menjadi fondasi responsive layout design di Android menggunakan ConstraintLayout. Saat sebuah widget diberikan constraint tanpa opposing constraint, maka constraint tersebut akan menggunakan margin untuk jarak constraint-nya. Hal ini bisa dilihat secara visual melalui garis lurus yang disertai besaran margin seperti pada Gambar 25–19.
Constraint di atas akan membuat posisi widget tetap tidak perduli dengan ukuran maupun orientasi layar. Hasilnya bisa dilihat pada Gambar 25–20 dimana posisi widget tidak terlihat saat layar diputar. Masalah yang sama juga akan muncul pada perangkat berlayar lebih kecil.
Saat diberikan opposing constriant, ia akan digambarkan oleh garis-garis lancip (yang memberikan tanda bahwa posisi tersebut tidak pasti pada titik koordinat X dan Y):
Pada layout di atas, vertical dan horizontal bias telah diatur sehingga posisi widget tersebut akan selalu berjarak 90% dari bawah serta berjarak 35% dari sisi kiri parent-nya. Saat layar di putar, maka widget tersebut masih akan memiliki persentase posisi yang sama, relatif terhadap layar yang sekarang dilihat:
Penting untuk selalu memperhitungkan baik bias maupun opposing constraint saat mendesain antarmuka secara manual dan melakukan koreksi saat membuat constraint otomatis.
Mengatur Ukuran Widget
Ukuran sebuah widget di dalam ConstraintLayout juga bisa diatur lewat Inspector. Seperti yang sempat disebutkan sebelumnya, ukuran widget dapat berupa wrap content, ukuran pasti atau mengikuti constraint (match constraint). Mode yang terpilih digambarkan oleh garis-garis yang ada di dalam kotak seperti pada Gambar 25–23:
Pada gambar di atas, baik ukuran horizontal maupun vertikal diatur menggunakan mode wrap content (digambarkan panah-panah ke dalam). Inspector menggunakan indikator visual berikut untuk menggambarkan tiga mode ukuran widget:
- Fixed Size/Ukuran tetap
- Match Constraint/Mengikuti constraint
- Wrap Content
Untuk mengubah pengaturan yang sudah ada, cukup klik pada indikator tersebut. Saat ukuran sebuah view diatur dalam mode match constraint, garis biru pada sisi-sisi tertentu akan berubah menjadi lancip dari yang biasanya garis lurus. Pada Gambar 25–24 contohnya, karena lebar dari view diatur menjadi match constraint maka garisnya berubah:
Selain itu, ukuran widget dapat pula diperpanjang baik secara horizontal maupun vertikal sampai memenuhi besar maksimal yang bisa dicapai melalui opsi Expand horizontally dan Expand vertically. Opsi-opsi ini bisa dilihat dengan cara klik kanan pada sebuah wdiget di dalam layout lalu memilih opsi Organize pada menu yang muncul (Gambar 25–25). Saat dipilih, widget terpilih akan mendapatkan tambahan lebar atau tinggi untuk mengisi ruang kosong yang tersedia.
Menggunakan Guidelines
Guidelines memberikan elemen tambahan dimana kita bisa mengarahkan suatu constraint. GUidelines bisa ditambah lewat klik kanan pada layout dan memiliki opsi Add Vertical Guideline atau Add Horizontal Guideline atau menggunakan menu pada toolbar seperti pada Gambar 25–26:
Setelah ditambahkan, sebuah guideline akan tampil sebagai garis putus-putus di layout dan dapat digeser dengan drag and drop. Untuk memberikan constriant ke guideline, klik pada handler constriant suatu widget lalu tarik ke guideline sebelum di lepas. Pada Gambar 25–27, sisi kiri dari dua Button terhubung oleh constraint ke sebuah vertical guideline.
Posisi dari sebuah vertical guideline dapat diatur dengan ukuran tetap dari posisi atas, bawah, kiri, atau kanan parent. Vertical guideline pada contoh gambar di atas contohnya, memiliki posisi 96dp dari sisi kiri parent.
Kita juga bisa memberikan posisi dengan persentase dari keseluruhan lebar atau tinggi parent. Untuk mengubah mode guideline, pilih salah satu guideline yang diinginkan lalu klik lingkaran pada bagian atas atau kiri guideline (tergantung pada apakah guideline tersebut vertikal atau horizontal). Gambar 25–28, contohnya, akan menampilkan sebuah guideline yang diposisikan menggunakan persentase:
Menambahkan Barriers
Barrier dapat ditambah dengan cara klik kanan di layout dan memilih salah satu dari Add Vertical Barrier atau Add Horizontal Barrier, atau menggunakan menu pada toolbar seperti pada Gambar 25–29:
Setelah sebuah barrier ditambahkan ke layout, ia akan terdaftar sebagai salah satu item di panel Component Tree:
Untuk menambah suatu view sebagai reference view (yang dalam arti lain sebagai view yang menentukan posisi barrier), cukup drag widget tersebut ke dalam barrier. Pada Gambar 25–31, contohnya, widget bernama textView1 dan textView2 telah diatur sebagai reference widget untuk barrier1:
Setelah reference view di tambahkan, barrier perlu tahu ke mana ia perlu menentukan arah barrier berdasarkan dua view tadi. Pengaturan arah barrier diatur dari dalam jendela Attributes tool saat barrier terpilih di panel Component Tree:
Gambar berikut menunjukkan sebuah layout dengan sebuah barrier yang di dalamnya terdapat textView1 dan textView2 sebagai reference view serta textView3 sebagai constrained view. Karena barrier akan bergerak dari sisi sebelah kanan reference view ke arah constraint view, maka barrier directionnya di atur ke end:
Widget Group Alignment
Layout Editor Android Studio memberikan banyak pilihan alignment saat dua atau lebih widget terpilih di layout. Cukup klik sambil menekan tombol shift di setiap widget untuk ikut terseleksi, lalu klik kanan dan pilih opsi-opsi untuk mensejajarkan widget-widget terpilih:
Seperti pada Gambar 25–35 di bawah, opsi-opsi tersebut juga tersedia sebagai sebuah tombol di toolbar Layout Editor:
Mengubah Layout lain ke ConstraintLayout
Untuk layout yang dibuat dengan layout terdahulu (seperti RelativeLayout atau LinearLayout), Layout Editor telah memiliki opsi untuk mengubahnya menjadi ConstriantLayout.
Saat Layout Editor tampil dalam Design mode, panel Component Tree akan terlihat di bagian bawah Palette. Mengubah sebuah layout menjadi ConstraintLayout dapat dilakukan dengan memilih layout yang ingin diubah, klik kanan lalu pilih Convert <jenis layout> to Constraint Layout:
Saat opsi ini terpilih, Android Studio akan mengubah layout sekarang menjadi Constriant Layout dan menggunakan inference untuk menentukan constriant yang paling sesuai.
Kesimpulan
Layout Editor yang telah didesain ulang bersama dengan ConstraintLayout membuat proses desain antarmuka yang kompleks di Android Studio menjadi lebih cepat dan intuitif. Bab ini telah membahas konsep-konsep seperti constraint, margin, dan bias lebih mendetail serta membahas bagaimana memanfaatkan fitur-fitur desain berbasis ConstraintLayout yang telah terintegrasi di Layout Editor.