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łajView.requestFocus()
. - Oznacz niestandardowe widoki z możliwością przewijania jako możliwe do zaznaczenia za pomocą elementów
android:focusable="true"
iandroid:focusableInTouchMode="true"
. - Jeśli widok przewijany jest dołączony po
Activity.onCreate()
– przez Na przykład oczekiwanie na zakończenie żądania sieciowego przed utworzeniem interfejsurequestFocus()
po załączeniu. - Jeśli widok przewijany to początkowo
INVISIBLE
lubGONE
, Wywołuj funkcjęrequestFocus()
po ustawieniu naVISIBLE
- 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:
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 } }
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:
- W Menedżerze pakietów SDK otwórz kartę Narzędzia SDK, aby pobierz emulator Androida w wersji 26.0.3 lub nowszej.
- W Android Studio wybierz Narzędzia >. Android > AVD Manager. Utwórz nowe urządzenie Wear za pomocą interfejsu API 25 lub wyższe.
- Uruchom emulator z Android Studio.
- 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: