Wejście obrotowe

Niektóre urządzenia z Wear OS mają fizyczny obracający się przycisk boczny. Gdy użytkownik zmieni powoduje przewijanie bieżącego widoku aplikacji w górę lub w dół. Ten typ danych wejściowych to tzw. pokrętłem.

Uwaga: ten przewodnik dotyczy głównie obsługi pokrętła Interfejsy oparte na widoku. Więcej informacji o obsłudze pokrętła w funkcji Compose na Wear OS: Rotary wejściowe podczas tworzenia wiadomości.

Wiele kontenerów z możliwością przewijania, takich jak ScrollView, ListView, HorizontalScrollView, i WearableRecyclerView, obsługują pokrętło, jeśli są ustawione ostrość bez konieczności noszenia. Kod związany z systemem operacyjnym. Skupienie jest ważnym wymogiem wstępnym, ponieważ na Androidzie 9 (poziom interfejsu API) 28) i wyższych, wyświetlenia nie są skupione automatycznie.

Koncentracja na sprawdzonych metodach

Aby zareagować na zdarzenia pokrętła, kontener z możliwością przewijania musi być zaznaczony. Zdarzenia wprowadzania obrotowego wprowadzania danych nie wyświetlają widoku jako bąbelków w hierarchii. Jeśli nie ma zaznaczonego widoku lub jeśli ten widok zwraca false z View.onGenericMotionEvent(), to zdarzenie jest wysyłane na adres Activity.onGenericMotionEvent()

Poniżej znajdziesz sprawdzone metody reagowania na zdarzenia związane z obrotami wprowadzania danych:

  • Pamiętaj, że domyślnie uruchomienie działania czy nawet kliknięcie ikony nie zapewnia fokusu, nawet jeśli które można zaznaczyć. Aby zawęzić widok, musi on korzystać z funkcji <requestFocus /> lub ręcznie wywołaj View.requestFocus().
  • Oznacz niestandardowe widoki z możliwością przewijania jako możliwe do zaznaczenia za pomocą elementów android:focusable="true" i android:focusableInTouchMode="true".
  • Jeśli widok przewijany jest dołączony po Activity.onCreate() – przez Na przykład oczekiwanie na zakończenie żądania sieciowego przed utworzeniem interfejsu requestFocus() po załączeniu.
  • Jeśli widok przewijany to początkowo INVISIBLE lub GONE, Wywołuj funkcję requestFocus() po ustawieniu na VISIBLE
  • Jeśli aktywność obejmuje wiele widoków, które można przewijać, wybierz jeden z nich za pomocą <requestFocus /> . Zagnieżdżone przewijanie nie jest obsługiwane w przypadku obracającego się przycisku bocznego.
  • Jeśli interfejs użytkownika zawiera inny widok, na którym koncentruje się użytkownik, wchodzić z nią w interakcję, np. InputText, zapewnij użytkownikowi możliwość przywrócenia fokusu do widoku przewijania jeśli straci ostrość, nasłuchuje kliknięć przewijania w widoku przewijanym i wywoła, requestFocus() w odpowiedzi.

Niestandardowe obracanie

Jeśli widok przesuwany nie obsługuje natywnie pokrętnego przewijania danych wejściowych lub chcesz używać pokrętła w czymś innym niż przewijanie – na przykład powiększać i pomniejszać lub obracać pokrętła – możesz obsługiwać zdarzenia przewijania, siebie. Pamiętaj, aby film przyciągał uwagę. W przeciwnym razie wydarzenia nie będą się pojawiać.

Poniższy fragment kodu pokazuje, jak używać MotionEvent, InputDeviceCompat, i ViewConfigurationCompat aby dodać do widoku przewijanie niestandardowe:

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;
  }
});

Testowanie za pomocą emulatora

Użyj emulatora Androida, aby symulować pokrętło. przewijanie treści na urządzeniu Wear. Aby uruchomić aplikację Wear, uruchom emulator swojego projektu lub przeciągnij Aby zainstalować emulator, umieść w nim plik APK.

Aby przetestować pokrętło na emulatorze:

  1. W Menedżerze pakietów SDK otwórz kartę Narzędzia SDK, aby pobierz emulator Androida w wersji 26.0.3 lub nowszej.
  2. W Android Studio wybierz Narzędzia >. Android > AVD Manager. Utwórz nowe urządzenie Wear za pomocą interfejsu API 25 lub wyższe.
  3. Uruchom emulator z Android Studio.
  4. Kliknij rozszerzone menu z 3 kropkami u dołu paska narzędzi emulatora. Kliknij Otwórz kartę rotarialnych wprowadzania danych w nowym oknie, aby otworzyć pokrętło i pokrętło. przewijanie danych wejściowych.

Ten film przedstawia pokrętło w emulatorze: