Alat Compose

Android Studio menghadirkan banyak fitur baru khusus untuk Jetpack Compose. Android Studio memanfaatkan pendekatan yang mengutamakan kode sekaligus meningkatkan produktivitas developer tanpa harus memilih antara antarmuka desain atau editor kode saja.

Perbedaan mendasar antara UI Berbasis Tampilan dan Jetpack Compose adalah bahwa Compose tidak mengandalkan View untuk merender composable. Sebagai akibat dari pendekatan arsitektur ini, Android Studio menawarkan fitur tambahan untuk Jetpack Compose tanpa harus membuka emulator atau terhubung ke perangkat dibandingkan dengan Tampilan Android, sehingga memungkinkan proses iterasi yang lebih cepat bagi developer untuk menerapkan desain UI.

Untuk mengaktifkan fitur khusus Android Studio untuk Jetpack Compose, Anda perlu menambahkan dependensi ini di file build.gradle aplikasi Anda:

implementation "androidx.compose.ui:ui-tooling:1.0.1"

Pratinjau Composable

Composable ditentukan oleh fungsi, yang dianotasi dengan @Composable:

@Composable
fun SimpleComposable() {
    Text("Hello World")
}

Elemen teks sederhana yang berisi kata "Hello World" (Halo Dunia)

Untuk mengaktifkan pratinjau composable ini, Anda perlu membuat composable lain, yang dianotasikan dengan @Composable dan @Preview, dengan menghapus composable yang sebelumnya Anda buat:

@Preview
@Composable
fun ComposablePreview() {
    SimpleComposable()
}

Terakhir, klik tampilan terpisah (desain/kode) untuk membuka panel sisi kanan tempat pratinjau akan ditampilkan:

Pemilih "Tampilan Terpisah" Android Studio

Tampilan teks sederhana yang ditampilkan di jendela pratinjau

@Preview menerima parameter untuk menyesuaikan cara Android Studio merendernya. Anda dapat menambahkan parameter ini secara manual di kode Anda, atau mengklik ikon gutter di sebelah @Preview untuk menampilkan alat pilih konfigurasi, agar Anda dapat memilih dan mengubah parameter konfigurasi tersebut.

@Preview fitur

Android Studio menawarkan beberapa fitur untuk memperluas pratinjau composable. Anda dapat mengubah desain penampung, berinteraksi dengan mereka, atau menerapkannya langsung ke emulator atau perangkat.

Mode interaktif

Mode interaktif memungkinkan Anda berinteraksi dengan pratinjau dengan cara yang sama seperti yang akan Anda lakukan di perangkat. Mode interaktif terisolasi di lingkungan sandbox (dipisahkan dari pratinjau lain), tempat Anda dapat mengklik elemen dan memasukkan input pengguna dalam pratinjau; pratinjau bahkan memutar animasi. Ini adalah cara cepat untuk menguji berbagai status dan gestur dari composable Anda, seperti kotak centang yang dicentang atau kosong.

Mode interaktif Pratinjau berjalan langsung di dalam Android Studio tanpa menjalankan emulator, yang menyebabkan beberapa batasan:

  • Tidak ada akses jaringan
  • Tidak ada akses file
  • Beberapa API Context mungkin tidak sepenuhnya tersedia

Pengguna mengklik tombol "interaktif" pratinjau

Video pengguna yang berinteraksi dengan pratinjau

Men-deploy Pratinjau

Anda dapat menerapkan @Preview tertentu ke emulator atau perangkat fisik. Pratinjau di-deploy dalam aplikasi project yang sama sebagai aktivitas baru, sehingga berbagi konteks dan izin yang sama, yang berarti Anda tidak perlu menulis kode boilerplate seperti meminta izin jika sudah diberikan.

Pengguna mengklik tombol "deploy" pratinjau

Video pengguna yang menerapkan pratinjau ke perangkat

Navigasi kode dan kerangka composable

Anda dapat mengarahkan kursor ke pratinjau untuk melihat garis besar dari composable yang ada di dalamnya. Mengklik outline composable akan memicu tampilan editor Anda untuk menuju ke definisinya.

Pengguna mengarahkan kursor ke atas pratinjau, yang menyebabkan Studio menampilkan outline composable.

Salin render @Preview

Setiap pratinjau yang dirender dapat disalin sebagai image dengan mengklik kanan pada image.

Pengguna mengklik pratinjau untuk menyalinnya sebagai image.

Menetapkan warna latar belakang

Secara default, log Anda dapat ditampilkan dengan latar belakang transparan. Untuk menambahkan latar belakang, tambahkan parameter showBackground dan backgroundColor. Perhatikan bahwa backgroundColor adalah Long ARGB, bukan nilai Color:

@Preview(showBackground = true, backgroundColor = 0xFF00FF00)
@Composable
fun WithGreenBackground() {
    Text("Hello World")
}

Persegi panjang hijau dengan tulisan "Hello World" (Halo Dunia)

Dimensi

Secara default, dimensi @Preview dipilih secara otomatis untuk menggabungkan kontennya. Jika ingin menyetel dimensi secara manual, Anda dapat menambahkan parameter heightDp dan widthDp. Perhatikan bahwa nilai tersebut sudah diinterpretasikan sebagai Dp, Anda tidak perlu menambahkan .dp di akhir nilai:

@Preview(widthDp = 50, heightDp = 50)
@Composable
fun SquareComposablePreview() {
    Box(Modifier.background(Color.Yellow)) {
        Text("Hello World")
    }
}

Kotak kuning dengan tulisan "Hello World" (Halo Dunia)

Lokal

Untuk menguji berbagai lokal pengguna, Anda perlu menambahkan parameter locale:

@Preview(locale = "fr-rFR")
@Composable
fun DifferentLocaleComposablePreview() {
    Text(text = stringResource(R.string.greetings))
}

Elemen teks sederhana yang berisi kata "Bonjour" dengan bendera Prancis

UI sistem

Jika Anda perlu menampilkan status dan panel tindakan di dalam pratinjau, tambahkan parameter showSystemUi:

@Preview(showSystemUi = true)
@Composable
fun DecoratedComposablePreview() {
    Text("Hello World")
}

Jendela pratinjau yang menampilkan aktivitas dengan status dan panel tindakan

@PreviewParameter

Anda dapat meneruskan data contoh ke fungsi Pratinjau Composable dengan menambahkan parameter menggunakan anotasi @PreviewParameter.

@Preview
@Composable
fun UserProfilePreview(
    @PreviewParameter(UserPreviewParameterProvider::class) user: User
) {
    UserProfile(user)
}

Untuk menyediakan data contoh, buat class yang mengimplementasikan PreviewParameterProvider dan menampilkan data contoh sebagai urutan.

class UserPreviewParameterProvider : PreviewParameterProvider<User> {
    override val values = sequenceOf(
        User("Elise"),
        User("Frank"),
        User("Julia")
    )
}

Akan ada satu pratinjau yang dirender per elemen data dalam urutan:

Anda dapat menggunakan class penyedia yang sama untuk beberapa pratinjau. Jika perlu, batasi jumlah pratinjau yang akan dirender dengan menyetel parameter batas.

@Preview
@Composable
fun UserProfilePreview(
    @PreviewParameter(UserPreviewParameterProvider::class, limit = 2) user: User
) {
    UserProfile(user)
}

Tindakan editor

Android Studio juga memiliki fitur di dalam area editor untuk meningkatkan produktivitas Anda dengan Jetpack Compose.

Template Langsung

Android Studio telah menambahkan template langsung terkait Compose, yang memungkinkan Anda memasukkan cuplikan kode untuk penyisipan cepat dengan mengetik singkatan template yang sesuai:

  • comp untuk menetapkan fungsi @Composable
  • prev untuk membuat fungsi composable @Preview
  • paddp untuk menambahkan Pengubah padding dalam dp
  • weight untuk menambahkan Pengubah weight
  • W, WR, WC untuk melingkupi composable saat ini dengan penampung Box, Row, atau Column

Ikon gutter

Ikon gutter adalah tindakan kontekstual yang terlihat di sidebar, di samping nomor baris. Android Studio memperkenalkan beberapa ikon gutter khusus untuk Jetpack Compose guna memudahkan pengalaman developer Anda.

Men-deploy pratinjau

Anda dapat menerapkan @Preview ke emulator atau perangkat fisik langsung dari ikon gutter:

Pengguna mengklik ikon gutter penerapan fungsi pratinjau, dan menerapkan pratinjau ke perangkat

Pemilih warna

Setiap kali warna ditetapkan di dalam atau di luar composable, pratinjau akan ditampilkan di gutter. Anda dapat mengubah warna melalui pemilih warna dengan mengkliknya seperti ini:

Pengguna mengklik warna di gutter, memunculkan pemilih warna

Pemilih resource image

Setiap kali drawable, vektor, atau image ditentukan di dalam atau di luar composable, pratinjaunya akan ditampilkan di gutter. Anda dapat mengubahnya melalui pemilih resource image dengan mengkliknya seperti ini:

Pengguna mengklik ikon di gutter, yang memunculkan pemilih resource

Pengembangan kode berulang

Sebagai developer seluler, Anda sering mengembangkan UI aplikasi langkah demi langkah, bukan mengembangkan semuanya sekaligus. Android Studio menggunakan pendekatan ini dengan Jetpack Compose dengan menyediakan fitur yang tidak memerlukan build penuh untuk memeriksa, mengubah nilai, dan memverifikasi hasil akhir.

Edit Langsung literal

Android Studio dapat secara real-time mengupdate beberapa literal konstan yang digunakan di composable dalam pratinjau, emulator, dan perangkat fisik. Berikut beberapa jenis yang didukung:

  • Int
  • String
  • Color
  • Dp
  • Boolean

Video pengguna yang mengubah literal dalam kode sumber, dan pratinjau yang diperbarui secara dinamis

Anda dapat melihat literal konstan yang memicu update real-time tanpa langkah kompilasi dengan mengaktifkan nilai yang disorot ini:

Video pengguna yang memungkinkan penyorotan literal langsung

Menerapkan Perubahan

Menerapkan Perubahan memungkinkan Anda mengupdate kode dan resource tanpa harus men-deploy ulang aplikasi ke emulator atau perangkat fisik (dengan beberapa batasan).

Setiap kali menambahkan, mengubah, atau menghapus composable, Anda dapat mengupdate aplikasi tanpa harus men-deploy ulang dengan mengklik tombol ini:

Pengguna yang mengklik tombol &quot;terapkan perubahan&quot;

Layout Inspector

Pemeriksa tata letak memungkinkan Anda memeriksa tata letak Compose di dalam aplikasi yang berjalan di emulator atau perangkat fisik.

Animasi

Android Studio memungkinkan Anda memeriksa animasi dari pratinjau interaktif. Jika animasi dijelaskan dalam composable pratinjau, Anda dapat memeriksa nilai yang tepat dari setiap nilai animasi pada waktu tertentu, menjeda animasi, memutarnya, mempercepatnya, atau memperlambatnya, untuk membantu Anda men-debug animasi di sepanjang transisinya:

@Preview
@Composable
fun PressedSurface() {
    val (pressed, onPress) = remember { mutableStateOf(false) }
    val transition = updateTransition(
        targetState = if (pressed) SurfaceState.Pressed else SurfaceState.Released
    )

    val width by transition.animateDp { state ->
        when (state) {
            SurfaceState.Released -> 20.dp
            SurfaceState.Pressed -> 50.dp
        }
    }
    val surfaceColor by transition.animateColor { state ->
        when (state) {
            SurfaceState.Released -> Color.Blue
            SurfaceState.Pressed -> Color.Red
        }
    }
    val selectedAlpha by transition.animateFloat { state ->
        when (state) {
            SurfaceState.Released -> 0.5f
            SurfaceState.Pressed -> 1f
        }
    }

    Surface(
        color = surfaceColor.copy(alpha = selectedAlpha),
        modifier = Modifier
            .toggleable(value = pressed, onValueChange = onPress)
            .size(height = 200.dp, width = width)
    ){}
}

Untuk mengaktifkan pemeriksa animasi, klik tombol ini:

Demo pengguna yang membuka pemeriksa animasi

Mengaktifkan fitur eksperimental

Beberapa fitur seperti pratinjau interaktif dan pemeriksa animasi hanya tersedia setelah diaktifkan secara manual di bagian eksperimental dalam preferensi Android Studio:

Alat Compose diaktifkan di dalam preferensi Eksperimental Android Studio