Masukan dari alat rotasi di Wear

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 memanggil requestFocus 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:

  1. Dari SDK Manager, gunakan tab SDK Tools untuk mendapatkan Android Emulator 26.0.3 atau yang lebih tinggi.
  2. Buat AVD (Android Virtual Device) dengan API 25.

    Dalam Studio, pilih Tools>Android>AVD Manager. Buat perangkat Wear baru dengan API 25.

  3. Jalankan emulator dari Android Studio.
  4. 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" dan android: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 memanggil View.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 dari View.onGenericMotionEvent, nantinya (dan hanya pada saat itu) peristiwa akan dikirimkan ke Activity.onGenericMotionEvent.