Pengguna dapat memindahkan fokus keyboard di seluruh elemen UI menggunakan tombol Tab atau tombol arah (panah / D-pad):
- Tab / Shift+Tab: Memindahkan fokus ke depan atau ke belakang dalam urutan tampilan satu dimensi.
- Tombol arah: Memindahkan fokus secara dua dimensi (Atas, Bawah, Kiri, dan Kanan).
Traversal fokus satu dimensi
Dalam traversal fokus satu dimensi, tombol Tab memajukan fokus melalui UI berdasarkan urutan tampilan visual di layar.
Misalnya, saat empat tombol disusun dalam baris:
Column { Row { Button(onClick = { /* ... */ }) { Text("1st") } Button(onClick = { /* ... */ }) { Text("2nd") } } Row { Button(onClick = { /* ... */ }) { Text("3rd") } Button(onClick = { /* ... */ }) { Text("4th") } } }
Menekan tombol Tab akan memindahkan fokus secara berurutan di seluruh tombol dalam urutan berikut:
- Tombol ke-1 (atas-awal)
- Tombol ke-2 (ujung atas)
- Tombol ke-3 (bawah-awal)
- Tombol ke-4 (ujung bawah)
Menekan Tab pada elemen terakhir akan kembali ke target fokus pertama. Menekan Shift+Tab akan memindahkan fokus dalam urutan terbalik.
Traversal fokus dua dimensi
Menekan tombol panah keyboard atau menggunakan D-pad akan memicu traversal fokus dua dimensi.
Dalam traversal dua dimensi, sistem memeriksa koordinat geometris dan batas spasial elemen UI untuk menentukan target terdekat ke arah yang diminta.
Traversal fokus dua dimensi tidak digabungkan. Jika pengguna menekan tombol Turun saat fokus pada elemen paling bawah, fokus akan tetap berada pada elemen tersebut, bukan melompat ke bagian atas layar.
Mereset penjelajahan fokus dengan klik pointer
Saat beralih antara keyboard fisik dan mouse atau touchpad di perangkat desktop atau perangkat layar besar:
- Hapus fokus saat mengetuk atau mengklik: Mengklik atau mengetuk ruang non-interaktif dengan mouse atau touchpad akan melepaskan fokus dari elemen aktif.
- Mulai ulang traversal: Setelah fokus dihapus, penekanan tombol Tab berikutnya akan memulai ulang traversal satu dimensi pada target fokus pertama dalam urutan tampilan visual, bukan melanjutkan dari elemen yang sebelumnya aktif. Hal ini sama dengan traversal fokus dua dimensi. Tombol arah memindahkan fokus keyboard ke target fokus terdekat dalam arah yang diminta.
Untuk mengetahui detail tentang cara menghapus fokus secara terprogram, lihat Memindahkan dan menghapus fokus.
Menyesuaikan urutan traversal fokus
Anda dapat menyesuaikan perilaku traversal
dengan pengubah focusProperties.
Menyesuaikan urutan traversal satu dimensi
Untuk mengganti traversal satu dimensi,
tentukan properti next atau previous
dengan FocusRequester:
- Buat objek
FocusRequesterdenganremember { FocusRequester() }. - Lampirkan
FocusRequesterke composable target menggunakan pengubahfocusRequester. - Terapkan pengubah
focusPropertieske composable sumber dan tetapkanFocusRequesterkenext(untuk Tab) atauprevious(untuk Shift+Tab).
val (first, second, third) = remember { FocusRequester.createRefs() } Column { Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(first) .focusProperties { next = third } ) { Text("First (Tab jumps to Third)") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(second) ) { Text("Second") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(third) ) { Text("Third") } }
Menyesuaikan urutan traversal dua dimensi
Demikian pula, Anda dapat mengganti traversal fokus dua dimensi
dengan menetapkan instance FocusRequester
ke up, down, start, end, left, atau right
dalam focusProperties:
val (topButton, bottomButton) = remember { FocusRequester.createRefs() } Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(topButton) .focusProperties { down = bottomButton right = bottomButton } ) { Text("Top button") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(bottomButton) ) { Text("Bottom button") }
Untuk memblokir navigasi fokus ke arah tertentu
(misalnya, pada batas tata letak),
tetapkan FocusRequester.Cancel ke properti tersebut
(misalnya, down = FocusRequester.Cancel).
Untuk secara eksplisit mempertahankan algoritma traversal default sistem untuk
arah tertentu, tetapkan FocusRequester.Default.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Target fokus
- Fokus di kolom teks
- Mengelompokkan target fokus
- Memindahkan dan menghapus fokus
- Meminta fokus secara terprogram
- Menguji navigasi fokus