Memberikan isyarat visual untuk visualisasi fokus yang lebih mudah
Meskipun semua elemen yang dapat difokuskan dari Material Theme sudah memiliki gaya fokus yang sesuai dengan tema, Anda mungkin perlu menambahkan beberapa elemen visual untuk membuat elemen yang terfokus yang lebih mudah ditemukan. Solusi yang baik adalah dengan mengubah batas tepi elemen Anda dengan warna yang memiliki kontras dengan latar belakang yang baik:
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
Dalam contoh ini, remember
digunakan untuk menyimpan warna batas di seluruh
rekomposisi, dan garis batas elemen diperbarui setiap kali elemen
mendapatkan atau kehilangan fokus.
Mengimplementasikan isyarat visual lanjutan
Dengan Jetpack Compose, Anda juga dapat membuat visual yang lebih canggih dan canggih yang lebih cocok dengan UI Anda.
- Pertama, buat
IndicationInstance
yang secara visual menggambar isyarat yang Anda inginkan di UI:private class MyHighlightIndicationInstance(isEnabledState: State<Boolean>) : IndicationInstance { private val isEnabled by isEnabledState override fun ContentDrawScope.drawIndication() { drawContent() if (isEnabled) { drawRect(size = size, color = Color.White, alpha = 0.2f) } } }
- Selanjutnya, buat
Indication
dan ingat status fokus:class MyHighlightIndication : Indication { @Composable override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance { val isFocusedState = interactionSource.collectIsFocusedAsState() return remember(interactionSource) { MyHighlightIndicationInstance(isEnabledState = isFocusedState) } } }
- Tambahkan
Indication
danInteractionSource
ke UI, melalui pengubahindication()
:val highlightIndication = remember { MyHighlightIndication() } var interactionSource = remember { MutableInteractionSource() } Card( modifier = Modifier .clickable( interactionSource = interactionSource, indication = highlightIndication, enabled = true, onClick = { } ) ) {}
Memahami status fokus
Umumnya, setiap kali status fokus berubah, FocusEvent
dipicu
hierarki, dan induk pengubah focusable()
dapat memprosesnya menggunakan
Pengubah onFocusChanged()
.
Jika Anda perlu mengetahui status fokus,Anda dapat menggunakan API ini bersama-sama
dengan pengubah onFocusChanged
:
isFocused
menampilkantrue
jika composable tempat pengubah dilampirkan berfokushasFocus
berfungsi mirip denganisFocused
, tetapi dengan perbedaan yang signifikan: alih-alih memeriksa yang saat ini saja, ia memeriksa apakah suatu elemen atau salah satu anak-anak tetap fokusisCaptured
menampilkantrue
setiap kali fokus ditahan. Hal ini terjadi, karena saatTextField
berisi data yang salah sehingga pengguna mencoba berfokus elemen lain tidak akan menghapus fokus.
Kolom ini ditampilkan di bawah ini:
Modifier.onFocusChanged {
val isFocused = it.isFocused
val hasFocus = it.hasFocus
val isCaptured= it.isCaptured
}
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Mengubah perilaku fokus
- Desain Material 2 di Compose
- Menangani input pengguna