Beberapa perangkat Wear OS memiliki tombol samping berputar dalam bentuk fisik. Saat diputar, tombol akan men-scroll tampilan aplikasi Anda saat ini ke atas atau ke bawah. Jenis input ini disebut input dari alat rotasi.
Banyak penampung yang dapat di-scroll, seperti
ScrollView
,
ListView
,
HorizontalScrollView
,
dan WearableRecyclerView
,
mendukung input dari alat rotasi jika memiliki fokus tanpa memerlukan kode khusus Wear
OS apa pun.
Fokus merupakan prasyarat yang penting, karena pada Android 9 (API level
28) dan yang lebih tinggi, tampilan tidak secara implisit menerima fokus.
Praktik terbaik fokus
Untuk merespons peristiwa input dari alat rotasi, penampung yang dapat di-scroll harus memiliki fokus.
Peristiwa input dari alat rotasi tidak menggelembungkan hierarki
tampilan. Jika tidak ada tampilan yang difokuskan, atau jika tampilan yang difokuskan menampilkan false
dari
View.onGenericMotionEvent()
,
peristiwa akan dikirim ke
Activity.onGenericMotionEvent()
.
Berikut adalah praktik terbaik untuk merespons peristiwa input dari alat rotasi:
- Perlu diingat bahwa, secara default, meluncurkan aktivitas atau mengetuk
tampilan tidak akan memberinya fokus, meskipun
dapat difokuskan. Untuk memberi fokus pada tampilan Anda, tampilan harus menggunakan tag
<requestFocus />
atau memanggilView.requestFocus()
secara manual. - Menandai tampilan kustom yang dapat di-scroll sebagai dapat difokuskan menggunakan
android:focusable="true"
danandroid:focusableInTouchMode="true"
. - Jika tampilan yang dapat di-scroll dilampirkan setelah
Activity.onCreate()
— misalnya, menunggu permintaan jaringan selesai sebelum mem-build UI, panggilrequestFocus()
setelah melampirkannya. - Jika tampilan yang dapat di-scroll pada awalnya adalah
INVISIBLE
atauGONE
, panggilrequestFocus()
saat Anda menetapkannya keVISIBLE
. - Jika aktivitas Anda berisi beberapa tampilan yang dapat di-scroll, pilih salah satu untuk difokuskan menggunakan
tag
<requestFocus />
. Scrolling bertingkat tidak didukung dengan tombol samping yang berputar. - Jika UI Anda berisi beberapa tampilan lain yang membutuhkan fokus saat pengguna
berinteraksi dengannya—misalnya
InputText
, berikan cara kepada pengguna untuk memulihkan fokus ke tampilan yang dapat di-scroll jika kehilangan fokus dengan memproses ketukan pada tampilan yang dapat di-scroll dan memanggilrequestFocus()
sebagai respons.
Perilaku rotasi kustom
Jika tampilan yang dapat di-scroll secara native tidak mendukung scroll input dari alat rotasi, atau jika Anda ingin menggunakan input dari alat rotasi untuk sesuatu selain men-scroll—misalnya untuk memperbesar dan memperkecil atau memutar tombol—Anda dapat menangani peristiwa scroll sendiri. Jangan lupa untuk memastikan tampilan Anda mendapatkan fokus. Jika tidak, peristiwa tidak akan muncul.
Cuplikan kode berikut menunjukkan cara menggunakan MotionEvent
,
InputDeviceCompat
,
dan ViewConfigurationCompat
untuk menambahkan scroll kustom ke tampilan Anda:
Kotlin
myView.setOnGenericMotionListener { v, ev -> if (ev.action == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ) // Swap these axes to scroll horizontally instead v.scrollBy(0, delta.roundToInt()) true } else { false } }
Java
myView.setOnGenericMotionListener(new View.OnGenericMotionListener() { @Override public boolean onGenericMotion(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ); // Swap these axes to scroll horizontally instead v.scrollBy(0, Math.round(delta)); return true; } return false; } });
Menguji menggunakan emulator
Gunakan Android Emulator untuk menyimulasikan scroll input dari alat rotasi pada perangkat Wear. Luncurkan aplikasi Wear pada emulator untuk menjalankan project, atau tarik file APK ke emulator untuk menginstalnya.
Untuk menguji input dari alat putar pada emulator:
- Dari SDK Manager, gunakan tab SDK Tools untuk mendapatkan Android Emulator 26.0.3 atau yang lebih tinggi.
- Di Android Studio, pilih Tools > Android > AVD Manager. Buat perangkat Wear baru dengan API 25 atau yang lebih tinggi.
- Jalankan emulator dari Android Studio.
- Klik menu tambahan tiga titik di bagian bawah toolbar emulator. Klik tab Input dari alat rotasi dalam jendela baru untuk membuka antarmuka input dari alat rotasi dan coba scroll input dari alat rotasi.
Video berikut menunjukkan input dari alat rotasi dalam emulator: