Tombol ikon menampilkan tindakan yang dapat dilakukan pengguna. Tombol ikon harus menggunakan ikon dengan makna yang jelas, dan biasanya mewakili tindakan umum atau yang sering digunakan.
Ada dua jenis tombol ikon:
- Default: Tombol ini dapat membuka elemen lain, seperti menu atau penelusuran.
- Tombol: Tombol ini dapat mewakili tindakan biner yang dapat diaktifkan atau dinonaktifkan, seperti "favorit" atau "bookmark".
Platform API
Gunakan composable IconButton untuk menerapkan tombol ikon standar. Untuk
membuat gaya visual yang berbeda seperti terisi, tonal terisi, atau bergaris batas, gunakan
FilledIconButton, FilledTonalIconButton, dan
OutlinedIconButton.
Parameter utama untuk IconButton meliputi:
onClick: Fungsi lambda yang dijalankan saat pengguna mengetuk tombol ikon.enabled: Boolean yang mengontrol status aktif tombol. Jikafalse, tombol tidak merespons input pengguna.content: Konten composable di dalam tombol, biasanyaIcon.
Contoh dasar: Tombol ikon beralih
Contoh ini menunjukkan cara menerapkan tombol ikon tombol. Tombol ikon tombol beralih mengubah tampilannya berdasarkan apakah tombol tersebut dipilih atau tidak dipilih.
@Preview @Composable fun ToggleIconButtonExample() { // isToggled initial value should be read from a view model or persistent storage. var isToggled by rememberSaveable { mutableStateOf(false) } IconButton( onClick = { isToggled = !isToggled } ) { Icon( painter = if (isToggled) painterResource(R.drawable.favorite_filled) else painterResource(R.drawable.favorite), contentDescription = if (isToggled) "Selected icon button" else "Unselected icon button." ) } }
Poin penting tentang kode
- Composable
ToggleIconButtonExamplemenentukanIconButtonyang dapat diubah.mutableStateOf(false)membuat objekMutableStateyang menyimpan nilai boolean, yang awalnyafalse. Hal ini menjadikanisToggledsebagai holder status, yang berarti Compose merekomposisi UI setiap kali nilainya berubah.rememberSaveablememastikan statusisToggledtetap ada di seluruh perubahan konfigurasi, seperti rotasi layar.
- Lambda
onClickdariIconButtonmenentukan perilaku tombol saat diklik, yang mengalihkan status antaratruedanfalse. - Parameter
paintercomposableIconsecara bersyarat memuatpainterResourceyang berbeda berdasarkan statusisToggled. Tindakan ini akan mengubah tampilan visual ikon.- Jika
isToggledadalahtrue, kode akan memuat drawable hati yang terisi. - Jika
isToggledadalahfalse, drawable hati yang digariskan akan dimuat.
- Jika
contentDescriptiondariIconjuga diperbarui berdasarkan statusisToggleduntuk memberikan informasi aksesibilitas yang sesuai.
Hasil
Gambar berikut menunjukkan tombol ikon tombol dari cuplikan sebelumnya dalam status tidak dipilih:
Contoh lanjutan: Tindakan berulang saat ditekan
Bagian ini menunjukkan cara membuat tombol ikon yang terus memicu tindakan saat pengguna menekan dan menahannya, bukan hanya memicu sekali per klik.
@Composable fun MomentaryIconButton( unselectedImage: Int, selectedImage: Int, contentDescription: String, modifier: Modifier = Modifier, stepDelay: Long = 100L, // Minimum value is 1L milliseconds. onClick: () -> Unit ) { val interactionSource = remember { MutableInteractionSource() } val isPressed by interactionSource.collectIsPressedAsState() val pressedListener by rememberUpdatedState(onClick) LaunchedEffect(isPressed) { while (isPressed) { delay(stepDelay.coerceIn(1L, Long.MAX_VALUE)) pressedListener() } } IconButton( modifier = modifier, onClick = onClick, interactionSource = interactionSource ) { Icon( painter = if (isPressed) painterResource(id = selectedImage) else painterResource(id = unselectedImage), contentDescription = contentDescription, ) } }
Poin penting tentang kode
MomentaryIconButtonmenggunakanunselectedImage: Int, ID resource drawable untuk ikon saat tombol tidak ditekan, danselectedImage: Int, ID resource drawable untuk ikon saat tombol ditekan.- Class ini menggunakan
interactionSourceuntuk melacak interaksi "tekan" secara khusus dari pengguna. isPressedbernilai benar (true) saat tombol sedang ditekan secara aktif dan salah (false) jika tidak. JikaisPressedadalahtrue,LaunchedEffectakan memasuki loop.- Di dalam loop ini, skrip menggunakan
delay(denganstepDelay) untuk membuat jeda di antara tindakan pemicu.coerceInmemastikan penundaan minimal 1 md untuk mencegah loop tanpa batas. pressedListenerdipanggil setelah setiap penundaan dalam loop. Tindakan ini membuat tindakan berulang.
- Di dalam loop ini, skrip menggunakan
pressedListenermenggunakanrememberUpdatedStateuntuk memastikan bahwa lambdaonClick(tindakan yang akan dilakukan) selalu yang terbaru dari komposisi terbaru.Iconmengubah gambar yang ditampilkan berdasarkan apakah tombol sedang ditekan atau tidak.- Jika
isPressedbenar,selectedImageakan ditampilkan. - Jika tidak,
unselectedImageakan ditampilkan.
- Jika
Selanjutnya, gunakan MomentaryIconButton ini dalam contoh. Cuplikan berikut
menunjukkan dua tombol ikon yang mengontrol penghitung:
@Preview() @Composable fun MomentaryIconButtonExample() { var pressedCount by remember { mutableIntStateOf(0) } Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { MomentaryIconButton( unselectedImage = R.drawable.fast_rewind, selectedImage = R.drawable.fast_rewind_filled, stepDelay = 100L, onClick = { pressedCount -= 1 }, contentDescription = "Decrease count button" ) Spacer(modifier = Modifier) Text("advanced by $pressedCount frames") Spacer(modifier = Modifier) MomentaryIconButton( unselectedImage = R.drawable.fast_forward, selectedImage = R.drawable.fast_forward_filled, contentDescription = "Increase count button", stepDelay = 100L, onClick = { pressedCount += 1 } ) } }
Poin penting tentang kode
- Composable
MomentaryIconButtonExamplemenampilkanRowyang berisi dua instanceMomentaryIconButtondan composableTextuntuk membuat UI yang menambah dan mengurangi penghitung. - Fungsi ini mempertahankan variabel status
pressedCountyang dapat diubah menggunakanrememberdanmutableIntStateOf, yang diinisialisasi ke 0. SaatpressedCountberubah, composable apa pun yang mengamatinya (seperti composableText) akan merekomposisi untuk mencerminkan nilai baru. MomentaryIconButtonpertama mengurangipressedCountsaat diklik atau ditahan.MomentaryIconButtonkedua meningkatkanpressedCountsaat diklik atau ditahan.- Kedua tombol menggunakan
stepDelay100 milidetik, yang berarti tindakanonClickdiulang setiap 100 milidetik saat tombol ditekan.
Hasil
Video berikut menunjukkan UI dengan tombol ikon dan penghitung: