Beberapa perangkat Wear OS mendukung masukan dari alat rotasi, seperti tombol sisi rotasi (RSB). Ketika pengguna memutar tombol, tampilan saat ini aplikasi Anda akan men-scroll ke atas atau bawah.
Jika Anda menggunakan ScrollView, ListView, HorizontalScrollView, atau WearableRecyclerView dalam aplikasi, tampilan aplikasi akan mendapat dukungan masukan dari alat rotasi secara default. Jika Anda menggunakan tampilan khusus selain yang tercantum dalam daftar, atau jika ingin menangani peristiwa masukan dari alat rotasi secara manual, lihat Menambahkan Scroll Masukan dari Alat Rotasi Kustom.
Lihat referensi terkait berikut:
Praktik terbaik fokus
Untuk merespons peristiwa masukan dari alat rotasi, tampilan scroll Anda harus berada dalam fokus. Pada banyak kasus, hal ini terjadi secara otomatis; tampilan scroll Anda menjadi difokuskan langsung setelah Anda membuat Aktivitas. Namun, terdapat situasi ketika Anda perlu menangani fokus tampilan aplikasi secara manual, misalnya:
- Jika tampilan yang dapat di-scroll dilampirkan setelah Activity.onCreate() (misalnya, ketika Anda menunggu permintaan jaringan selesai sebelum membuat UI), Anda harus memanggil requestFocus setelah melampirkannya.
- Jika tampilan yang dapat di-scroll pada awalnya
INVISIBLE atau GONE, Anda harus memanggil
requestFocus
saat menyetelnya ke VISIBLE. - Jika Aktivitas berisi beberapa tampilan yang dapat di-scroll (misalnya, jika Anda menggunakan scroll yang disarangkan), Anda harus memilih salah satu untuk difokuskan (biasanya melalui tag <requestFocus />). Scroll yang disarangkan saat ini belum didukung untuk scroll RSB.
- Jika UI Anda berisi beberapa tampilan lain yang mencuri fokus saat pengguna berinteraksi dengan tampilan tersebut (ini jarang terjadi; contoh yang paling umum adalah
InputText
), Anda perlu memberi pengguna beberapa cara untuk mengembalikan fokus ke tampilan yang dapat di-scroll jika kehilangan fokus. Biasanya ini dilakukan dengan memproses ketukan pada tampilan yang dapat di-scroll dan memanggilrequestFocus
sebagai respons.
Menambahkan scroll masukan dari alat rotasi kustom
Jika tampilan yang dapat di-scroll tidak mendukung scroll masukan dari alat rotasi secara default, atau jika Anda ingin melakukan sesuatu selain melakukan scrolling sebagai respons terhadap peristiwa masukan dari alat rotasi (memperbesar/memperkecil, memutar dial, dll.), Anda dapat menggunakan metode
RotaryEncoder
dalam Wearable Support Library.
Cuplikan kode berikut menampilkan cara menggunakan RotaryEncoder
untuk menambahkan scroll kustom dalam tampilan aplikasi Anda:
Kotlin
myView.setOnGenericMotionListener(View.OnGenericMotionListener { v, ev -> if (ev.action == MotionEvent.ACTION_SCROLL && RotaryEncoder.isFromRotaryEncoder(ev)) { // Don't forget the negation here val delta = -RotaryEncoder.getRotaryAxisValue(ev) * RotaryEncoder.getScaledScrollFactor(context) // Swap these axes if you want to do horizontal scrolling instead v.scrollBy(0, Math.round(delta)) return@OnGenericMotionListener true } false })
Java
myView.setOnGenericMotionListener(new View.OnGenericMotionListener() { @Override public boolean onGenericMotion(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_SCROLL && RotaryEncoder.isFromRotaryEncoder(ev)) { // Don't forget the negation here float delta = -RotaryEncoder.getRotaryAxisValue(ev) * RotaryEncoder.getScaledScrollFactor( getContext()); // Swap these axes if you want to do horizontal scrolling instead v.scrollBy(0, Math.round(delta)); return true; } return false; } });
Menguji tombol masukan dari alat rotasi pada emulator
Anda dapat menggunakan Android Emulator untuk menyimulasikan scroll masukan dari alat rotasi pada perangkat Wear. Luncurkan aplikasi Wear pada emulator saat menjalankan project, atau tarik file APK ke emulator untuk menginstalnya.
Untuk menguji masukan dari alat putar pada emulator:
- Dari SDK Manager, gunakan tab SDK Tools untuk mendapatkan Android Emulator 26.0.3 atau yang lebih tinggi.
- Buat AVD (Android Virtual Device) dengan API 25.
Dalam Studio, pilih Tools>Android>AVD Manager. Buat perangkat Wear baru dengan API 25.
- Jalankan emulator dari Android Studio.
- Coba scroll masukan dari alat rotasi.
Klik tombol tambahan (tiga titik di bagian bawah toolbar emulator). Klik tab Masukan dari alat rotasi dalam jendela baru untuk membuka antarmuka masukan dari alat rotasi.
Video berikut menunjukkan masukan dari alat rotasi dalam emulator:
Tips perilaku fokus
- Sejak Android 9 (API level 28), tampilan tidak lagi menerima fokus secara implisit, dan harus melakukannya secara eksplisit.
- Tampilan yang dapat di-scroll harus didaftarkan sebagai tampilan yang dapat difokuskan menggunakan
android:focusable="true"
danandroid:focusableInTouchMode="true"
. - Secara default, dengan meluncurkan Aktivitas atau mengetuk tampilan bukan berarti akan memfokuskannya (meskipun dapat difokuskan). Untuk mencapai perilaku ini, tampilan harus menggunakan tag
<requestFocus />
atau memanggilView.requestFocus()
secara manual. - Peristiwa masukan dari alat rotasi hanya dikirim ke tampilan yang difokuskan. Peristiwa ini tidak menggelembungkan hierarki
tampilan. Jika tidak ada tampilan yang difokuskan, atau jika tampilan yang difokuskan menampilkan
false
dariView.onGenericMotionEvent
, nantinya (dan hanya pada saat itu) peristiwa akan dikirimkan keActivity.onGenericMotionEvent
.