Gestur pergelangan tangan dapat mengaktifkan interaksi cepat satu tangan dengan aplikasi Anda saat layar sentuh tidak dapat digunakan.
Misalnya, pengguna dapat men-scroll notifikasi dengan satu tangan sambil memegang segelas air dengan tangan lainnya. Kasus penggunaan lainnya untuk gestur pergelangan tangan mencakup:
- Dalam aplikasi joging, melihat layar vertikal yang menunjukkan jumlah langkah, waktu yang dihabiskan, dan kecepatan saat ini
- Dalam aplikasi perjalanan, men-scroll informasi penerbangan dan gerbang
- Dalam aplikasi berita, men-scroll artikel
Untuk meninjau gestur pergelangan tangan di perangkat smartwatch, pastikan gestur sudah aktif dengan memilih Setelan > Fitur lanjutan > Gestur > Gestur Pergelangan Tangan Aktif. Kemudian, selesaikan tutorial Gestur di smartwatch dengan memilih Luncurkan Tutorial.
Catatan: Menggoyangkan pergelangan tangan adalah gestur kembali atau urungkan di seluruh sistem dan tidak dapat disesuaikan oleh aplikasi.
Gestur pergelangan tangan dapat digunakan dalam cara berikut, seperti dijelaskan dalam panduan ini:
- Dengan tata letak melengkung, yang memiliki tindakan gestur yang telah ditentukan
- Dengan menggunakan peristiwa tombol secara langsung untuk menentukan tindakan pengguna baru
Setiap gestur pergelangan tangan dipetakan ke konstanta int
dari class
KeyEvent
,
seperti yang ditunjukkan dalam tabel berikut:
Gestur | KeyEvent | Deskripsi |
---|---|---|
Memutar pergelangan tangan ke luar |
KEYCODE_NAVIGATE_NEXT
|
Kode tombol ini mengarahkan ke item berikutnya. |
Memutar pergelangan tangan ke dalam |
KEYCODE_NAVIGATE_PREVIOUS
|
Kode tombol ini mengarahkan ke item sebelumnya. |
Menggunakan tata letak melengkung untuk mendukung gestur pergelangan tangan
Class
WearableRecyclerView
menyediakan tata letak melengkung
untuk daftar dan mendukung gestur pergelangan tangan
secara otomatis. Class ini memiliki tindakan yang telah ditentukan untuk kejadian
gestur pergelangan tangan ketika fokus berada pada tampilan. Untuk mengetahui informasi tentang penggunaan
class WearableRecyclerView
, lihat Membuat daftar di Wear OS. Selain itu, lihat
bagian Praktik terbaik di panduan ini.
Catatan: ClassWearableRecyclerView
menggantikan class serupa
yang tidak digunakan lagi di Wearable Support Library.
Meskipun menggunakan WearableRecyclerView
, Anda mungkin perlu menggunakan
konstanta dari class
KeyEvent
. Tindakan yang telah ditentukan dapat diganti dengan menambahkan
WearableRecyclerView
ke subclass dan mengimplementasikan kembali
callback onKeyDown()
. Perilaku ini dapat dinonaktifkan sepenuhnya
menggunakan setEnableGestureNavigation(false)
.
Untuk mengetahui informasi selengkapnya, lihat
Menangani tindakan keyboard.
Menggunakan peristiwa tombol secara langsung
Anda dapat menggunakan peristiwa tombol di luar
WearableRecyclerView
untuk memicu tindakan baru sebagai respons terhadap
peristiwa gestur. Yang penting, peristiwa gestur ini dikenali saat perangkat dalam
mode aktif, dan peristiwa ditayangkan dengan cara yang sama seperti semua peristiwa tombol.
Class yang berkaitan dengan interaksi pengguna, seperti View
atau
Activity
, dan yang menerapkan
KeyEvent.Callback
dapat memproses peristiwa tombol yang berkaitan dengan
gestur pergelangan tangan, seperti halnya class tersebut dapat dicantumkan ke peristiwa tombol lainnya. Framework Android
memanggil View
atau Activity
yang memiliki
fokus dengan peristiwa tombol. Untuk gestur, callback metode onKeyDown()
dipanggil saat gestur terjadi.
Contohnya, aplikasi dapat mengganti tindakan yang telah ditetapkan dalam View
atau Activity
yang mengimplementasikan KeyEvent.Callback
sebagai berikut:
Kotlin
class GesturesActivity : Activity() { /* KeyEvent.Callback */ override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_NAVIGATE_NEXT -> // Do something that advances a user View to the next item in an ordered list. moveToNextItem() KeyEvent.KEYCODE_NAVIGATE_PREVIOUS -> // Do something that advances a user View to the previous item in an ordered list. moveToPreviousItem() else -> { // If you did not handle it, let it be handled by the next possible element as determined // by the Activity. super.onKeyDown(keyCode, event) } } } /** Shows the next item in the custom list. */ private fun moveToNextItem(): Boolean { ... // Return true if handled successfully, otherwise return false. return false } /** Shows the previous item in the custom list. */ private fun moveToPreviousItem(): Boolean { ... // Return true if handled successfully, otherwise return false. return false } }
Java
public final class GesturesActivity extends Activity { @Override /* KeyEvent.Callback */ public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_NAVIGATE_NEXT: // Do something that advances a user View to the next item in an ordered list. return moveToNextItem(); case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS: // Do something that advances a user View to the previous item in an ordered list. return moveToPreviousItem(); } // If you did not handle it, let it be handled by the next possible element as determined by the Activity. return super.onKeyDown(keyCode, event); } /** Shows the next item in the custom list. */ private boolean moveToNextItem() { boolean handled = false; ... // Return true if handled successfully, otherwise return false. return handled; } /** Shows the previous item in the custom list. */ private boolean moveToPreviousItem() { boolean handled = false; ... // Return true if handled successfully, otherwise return false. return handled; } }
Praktik terbaik
- Tinjau halaman
KeyEvent
danKeyEvent.Callback
untuk penayangan peristiwa tombol keView
danActivity
. - Pertahankan tindakan dengan arah yang konsisten: gunakan "putar pergelangan tangan ke luar" untuk berikutnya dan "putar pergelangan tangan ke dalam" untuk sebelumnya.
- Tetapkan alternatif sentuhan untuk gestur.
- Sediakan respons visual.
- Jangan gunakan kode tombol untuk mengimplementasikan fungsi yang
kontra-intuitif dengan bagian sistem lainnya. Misalnya, jangan gunakan
KEYCODE_NAVIGATE_NEXT
untuk membatalkan tindakan atau memilih sumbu kiri-kanan dengan memutar pergelangan. - Jangan memblokir peristiwa tombol pada elemen yang bukan bagian dari antarmuka pengguna, seperti tampilan yang berada di balik layar atau tertutup sebagian. Ini juga berlaku untuk peristiwa tombol apa pun.
- Jangan menafsirkan ulang gestur putar pergelangan berulang menjadi gestur baru milik Anda sendiri. Hal ini mungkin bertentangan dengan gestur "menggoyangkan pergelangan tangan" yang ada di sistem.
Agar dapat menerima peristiwa tombol gestur, tampilan harus memiliki fokus. Lihat
View.setFocusable()
.Karena diperlakukan sebagai peristiwa tombol, gestur memicu transisi keluar dari "mode sentuh" yang mungkin melakukan hal-hal tidak terduga. Karena pengguna dapat bergantian menggunakan sentuhan dan gestur, metode
View::setFocusableInTouchmode()
mungkin diperlukan. Dalam beberapa kasus, Anda mungkin juga perlu menggunakansetDescendantFocusability(FOCUS_BEFORE_DESCENDANTS)
sehingga ketika fokus berubah setelah peralihan ke atau dari mode sentuh, tampilan yang diinginkan akan mendapatkan fokus.- Gunakan
requestFocus()
danclearFocus()
dengan hati-hati:- Saat memanggil
requestFocus()
, pastikan sesuai agar tampilan dapat memiliki fokus. Jika tampilan berada di balik layar atau tertutup oleh tampilan lainnya, hal tidak terduga mungkin terjadi ketika gestur memicu callback. - Metode
clearFocus()
memulai penelusuran fokus untuk menemukan tampilan lain yang sesuai. Bergantung pada hierarki tampilan, pencarian ini mungkin memerlukan komputasi yang sulit. Penetapan fokus ke tampilan yang tidak diharapkan untuk menerimanya juga dapat terjadi.
- Saat memanggil
Peristiwa tombol ditayangkan terlebih dahulu ke tampilan dengan fokus dalam hierarki tampilan. Jika tampilan yang difokuskan tidak menangani peristiwa—dengan kata lain hanya menampilkan
false
—peristiwa tersebut tidak akan ditayangkan ke tampilan induk, meskipun dapat menerima fokus dan memilikiKeyListener
. Sebaliknya, peristiwa akan ditayangkan ke aktivitas saat ini yang memiliki hierarki tampilan dengan fokus.Oleh karena itu, Anda mungkin perlu menangkap semua peristiwa di level yang lebih tinggi, lalu meneruskan kode yang relevan ke bawah. Atau, Anda dapat memasukkan aktivitas ke subclass dan mengganti metode
dispatchKeyEvent(KeyEvent event)
untuk menangkap kunci saat diperlukan atau menanganinya ketika tidak ditangani di lapisan yang lebih rendah.