Pertemuan 3

Dasar UI/UX &
Layouting Android 🎨

Sebagus apapun logika Java kamu, kalau tampilannya jelek, user pasti kabur! Hari ini kita akan belajar merias wajah aplikasi pakai XML biar estetik dan fungsional.

1. XML: Bukan Bahasa Alien!

Kalau Java itu "Otak"-nya, maka XML itu "Wajah"-nya. XML (Extensible Markup Language) dipakai untuk mendesain User Interface (UI).

Bedanya sama Java, XML ini lebih gampang dibaca. Isinya cuma tag pembuka <Tag> dan properti-properti aja. Mirip kayak HTML kalau kamu pernah belajar bikin web.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Halo Ayang!"
    android:textColor="#FF0000" />

2. View vs ViewGroup (Bata & Semen)

View (Komponen)

Elemen UI yang punya wujud dan bisa disentuh user. Ibarat batu batanya.

TextView Button ImageView

ViewGroup (Wadah)

Container tak kasat mata yang ngebungkus dan ngatur posisi para View. Ibarat semennya.

LinearLayout ConstraintLayout

3. Linear vs Constraint Layout

LinearLayout

Menyusun elemen secara berbaris lurus, ketat, tanpa tumpang tindih. Cocok untuk susunan yang simpel.

Vertical
Horizontal

ConstraintLayout (The Boss)

Layout modern dari Android. Sistemnya pakai "Karet Gelang" yang mengaitkan elemen ke pinggir layar atau ke elemen lain. Sangat responsif!

Button

Eksplorasi Layout Lainnya

Sebagai tambahan wawasan, berikut adalah beberapa layout lain yang ada di Android (baik yang sudah legacy maupun yang masih sangat relevan):

1. RelativeLayout (Legacy)

Menyusun elemen relatif terhadap elemen lain. Misalnya, Tombol B ditaruh "di sebelah kanan" dan "di bawah" Tombol A. Dulu sangat populer sebelum ada ConstraintLayout.

A
B (Kanan A)
C (Bawah A)

2. TableLayout (Legacy)

Menyusun elemen dalam baris dan kolom seperti Microsoft Excel. Saat ini jarang digunakan karena kaku dan kurang responsif untuk ukuran layar yang berbeda-beda.

Col 1
Col 2
Span 2 Columns
Col 1
Col 2

3. GridLayout

Versi modern dari TableLayout. Sangat cocok untuk membuat tampilan seperti aplikasi Kalkulator atau Galeri foto yang susunannya rapi dan terkotak-kotak.

4. RecyclerView (The King of Lists)

Bukan sekadar layout, ini adalah komponen wajib untuk menampilkan daftar data panjang (seperti feed Instagram atau riwayat chat). Sangat cepat dan hemat memori!

4. Spacing: Margin vs Padding

Ini konsep yang sering bikin bingung! Padding itu jarak ke DALAM (bikin komponen melar/gendut), sedangkan Margin itu jarak ke LUAR (ngedorong komponen lain). Coba geser slider di bawah biar paham!

Tips: Di Android, ukuran spasi/kotak pakai satuan dp (Density-independent Pixels). Untuk teks pakai sp.
Isi Konten (Text)
Parent Layout

5. Kamus Atribut & Simulator

Simulator: Visibility

Coba ubah status kotak tengah (Kotak B) untuk melihat perbedaan invisible dan gone.

A
B
C
Status Kotak B: visible

Gravity vs Layout_Gravity

gravity mengatur isi (teks), layout_gravity mengatur kotak itu sendiri di dalam parent-nya.

Isi Teks

Cheat Sheet XML Lengkap

Atribut XMLFungsi Utama
android:layout_width / heightLebar/Tinggi View (match_parent, wrap_content, dp).
android:layout_marginJarak LUAR (mendorong elemen lain di sekitarnya). Bisa dispesifikkan pakai marginTop, Bottom, Start, End.
android:paddingJarak DALAM (ruang antara batas View dengan isi/kontennya).
android:background(Tint)Warna latar belakang. (Tint digunakan untuk memberi filter/warna tambahan).
android:elevationEfek melayang/bayangan (3D). Makin besar angka dp, bayangan makin luas.
android:alphaTingkat transparansi (0.0 sampai 1.0).
android:minWidth / maxWidthMenjamin dimensi komponen tidak kurang dari / melebihi batas ukuran ini.

6. Hands-on Quest: Eksperimen Berbagai Layout!

Yuk, buka lagi Android Studio kalian! Kita akan mencoba coding UI menggunakan beberapa jenis layout. Buka file activity_main.xml dan ubah mode di kanan atas ke Split. Hapus semua isinya, lalu coba copy-paste misi di bawah ini satu per satu:

Layar Login Aesthetic

Perhatikan atribut app:layout_constraint... bekerja seperti karet gelang yang menarik elemen ke berbagai arah.

<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">

    <!-- Judul Halaman -->
    <TextView 
        android:id="@+id/tvTitle" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Welcome Back!" 
        android:textSize="28sp" 
        android:textStyle="bold" 
        app:layout_constraintTop_toTopOf="parent" 
        app:layout_constraintStart_toStartOf="parent" 
        app:layout_constraintEnd_toEndOf="parent" 
        android:layout_marginTop="100dp" />
    
    <!-- Kolom Input Email -->
    <EditText 
        android:id="@+id/etEmail" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:hint="Masukkan Email" 
        android:padding="16dp" 
        app:layout_constraintTop_toBottomOf="@id/tvTitle" 
        app:layout_constraintStart_toStartOf="parent" 
        app:layout_constraintEnd_toEndOf="parent" 
        android:layout_marginTop="40dp" 
        android:layout_marginHorizontal="32dp" />
    
    <!-- Tombol Login -->
    <Button 
        android:id="@+id/btnLogin" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:text="LOGIN SEKARANG" 
        app:layout_constraintTop_toBottomOf="@id/etEmail" 
        app:layout_constraintStart_toStartOf="@id/etEmail" 
        app:layout_constraintEnd_toEndOf="@id/etEmail" 
        android:layout_marginTop="24dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

7. Tugas UI (Challenge)

Waktunya melatih insting desainmu di XML:

  1. Buka activity_main.xml. Hapus isinya yang lama.
  2. Buat sebuah Profile Card sederhana menggunakan LinearLayout (Pastikan orientation-nya Vertical).
  3. Isi dengan: 1 ImageView (gambar profil), 1 TextView (Nama), 1 TextView (Bio), dan 1 Button (Follow).
  4. Atur biar rapi di tengah dengan android:gravity="center" pada LinearLayout utama.
  5. Kasih margin dan padding yang pas biar nggak kelihatan sempit!
  6. Screenshot hasil layar HP-mu! 📸