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 alih: 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 diisi, diisi tonal, atau digarisbatasi, gunakan
FilledIconButton, FilledTonalIconButton, dan
OutlinedIconButton.
Parameter utama untuk IconButton mencakup:
onClick: Fungsi lambda yang dijalankan saat pengguna mengetuk tombol ikon.enabled: Boolean yang mengontrol status tombol yang diaktifkan. Jikafalse, tombol tidak akan merespons input pengguna.content: Konten composable di dalam tombol, biasanyaIcon.
Contoh dasar: Tombol ikon tombol
Contoh ini menunjukkan cara menerapkan tombol ikon tombol. Tombol ikon tombol akan 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-poin penting tentang kode
- Composable
ToggleIconButtonExamplemenentukanIconButtonyang dapat diaktifkan.mutableStateOf(false)membuat objekMutableStateyang menyimpan nilai boolean, awalnyafalse. Hal ini menjadikanisToggledsebagai holder status, yang berarti Compose mengomposisi ulang 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
paintercomposableIconmemuatpainterResourceyang berbeda secara kondisional berdasarkan statusisToggled. Tindakan ini akan mengubah tampilan visual ikon.- Jika
isToggledadalahtrue, kode ini akan memuat drawable hati yang terisi. - Jika
isToggledadalahfalse,isToggledakan memuat drawable hati yang digarisbatasi.
- Jika
contentDescriptiondariIconjuga diperbarui berdasarkan statusisToggleduntuk memberikan informasi aksesibilitas yang sesuai.
Hasil
Gambar berikut menampilkan tombol ikon tombol dari cuplikan sebelumnya dalam status yang 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-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.- Fungsi ini menggunakan
interactionSourceuntuk melacak interaksi "tekan" secara khusus dari pengguna. isPressedbernilai benar jika tombol ditekan secara aktif dan salah jika tidak. JikaisPressedadalahtrue,LaunchedEffectakan memasuki loop.- Di dalam loop ini, loop menggunakan
delay(denganstepDelay) untuk membuat jeda di antara tindakan pemicu.coerceInmemastikan penundaan minimal 1 md untuk mencegah loop tanpa henti. pressedListenerdipanggil setelah setiap penundaan dalam loop. Tindakan ini akan membuat tindakan diulang.
- Di dalam loop ini, loop menggunakan
pressedListenermenggunakanrememberUpdatedStateuntuk memastikan bahwa lambdaonClick(tindakan yang akan dilakukan) selalu yang terbaru dari komposisi terbaru.Iconmengubah gambar yang ditampilkan berdasarkan apakah tombol saat ini ditekan atau tidak.- Jika
isPressedbernilai benar,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-poin penting tentang kode
- Composable
MomentaryIconButtonExamplemenampilkanRowyang berisi dua instanceMomentaryIconButtondan composableTextuntuk mem-build UI guna menambahkan dan mengurangi penghitung. - Fungsi ini mempertahankan variabel status
pressedCountyang dapat diubah menggunakanrememberdanmutableIntStateOf, yang diinisialisasi ke 0. SaatpressedCountberubah, setiap composable yang mengamatinya (seperti composableText) akan merekomposisi untuk mencerminkan nilai baru. MomentaryIconButtonpertama akan mengurangipressedCountsaat diklik atau ditahan.MomentaryIconButtonkedua akan meningkatkanpressedCountsaat diklik atau dipegang.- Kedua tombol menggunakan
stepDelay100 milidetik, yang berarti tindakanonClickdiulang setiap 100 md saat tombol ditekan.
Hasil
Video berikut menampilkan UI dengan tombol ikon dan penghitung: