Używanie gestów nadgarstka na Wear

Gesty nadgarstka umożliwiają szybkie korzystanie z aplikacji jedną ręką gdy korzystanie z ekranu dotykowego jest niewygodne.

Na przykład użytkownik może przewinąć stronę przez powiadomienia jedną ręką, trzymając kubek wody inne. Inne zastosowania gestów nadgarstka to:

  • W aplikacji do biegania: przechodzenie przez pionowe ekrany, na których widać zrobione kroki, czas, jaki upłynął, i bieżące tempo
  • W aplikacji podróżniczej przewijanie informacji o locie i bramce.
  • W aplikacji z wiadomościami przewijanie artykułów

Aby sprawdzić gesty nadgarstka na zegarku na urządzeniu, upewnij się, że gesty są Włączony, wybierając Ustawienia > Funkcje zaawansowane > Gesty > Gesty nadgarstka Włączony. Następnie podaj Samouczek gestów na zegarku – wybierz Uruchom samouczek.

Uwaga: potrząśnięcie nadgarstkiem jest gestem cofania lub cofania w całym systemie. i nie można go dostosowywać przez aplikacje.

Gesty nadgarstka można używać na kilka sposobów, zgodnie z opisem w tym przewodniku:

Każdy gest nadgarstka jest mapowany na stałą int z KeyEvent klasy jak w poniższej tabeli:

Gest Kluczowe zdarzenie Opis
Szybki obrót nadgarstka od siebie KEYCODE_NAVIGATE_NEXT Ten kod klucza należy przekazać do następnego elementu.
Szybki obrót nadgarstka do siebie KEYCODE_NAVIGATE_PREVIOUS Ten kod klucza przechodzi do poprzedniego elementu.

Użyj układu zakrzywionego, by obsługiwać gesty nadgarstka

Klasa WearableRecyclerView udostępnia zakrzywioną układ dla list i automatycznie obsługuje gesty nadgarstka. Klasa ma wstępnie zdefiniowane działania dla wystąpień i gesty nadgarstka, gdy ostrość jest widoczna. Informacje o korzystaniu z WearableRecyclerView znajdziesz w artykule Tworzenie list w Wear OS. Zobacz też Sprawdzone metody w tym przewodniku.

Uwaga: klasa WearableRecyclerView zastępuje podobne, . wycofane w bibliotece pomocy do noszenia.

Nawet jeśli używasz WearableRecyclerView, możesz też użyć stałe z KeyEvent zajęcia. Wstępnie zdefiniowane działania można zastąpić, stosując podklasyfikację WearableRecyclerView i ponowne wdrożenie komponentu onKeyDown() oddzwonienie. Możesz całkowicie wyłączyć tę funkcję. za pomocą funkcji setEnableGestureNavigation(false). Więcej informacji: Obsługa działań klawiatury.

Bezpośrednie używanie kluczowych zdarzeń

Kluczowych zdarzeń możesz używać poza obiektem WearableRecyclerView, aby wyzwalać nowe działania w odpowiedzi na gest zdarzeń. Co ważne, te zdarzenia gestów są rozpoznawane, gdy urządzenie jest włożone i są wyświetlane w taki sam sposób jak wszystkie kluczowe zdarzenia.

Klasa powiązana z interakcją użytkownika, np. View lub Activity, która stosuje KeyEvent.Callback może nasłuchiwać kluczowych zdarzeń związanych z gesty nadgarstka tak samo, jak w przypadku każdego innego kluczowego zdarzenia. Struktura Androida wywołuje metodę View lub Activity, która ma skupienie się na kluczowych zdarzeniach. W przypadku gestów onKeyDown() wywołanie zwrotne metody jest wywoływane po wystąpieniu gestów.

Na przykład aplikacja może zastąpić wstępnie zdefiniowane działania w polu View lub Activity, która implementuje KeyEvent.Callback w ten sposób:

Kotlin

class GesturesActivity : Activity() {

    /* KeyEvent.Callback */
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        return when (keyCode) {
            KeyEvent.KEYCODE_NAVIGATE_NEXT ->
                // Do something that advances a user View to the next item in an ordered list.
                moveToNextItem()
            KeyEvent.KEYCODE_NAVIGATE_PREVIOUS ->
                // Do something that advances a user View to the previous item in an ordered list.
                moveToPreviousItem()
            else -> {
                // If you did not handle it, let it be handled by the next possible element as determined
                // by the Activity.
                super.onKeyDown(keyCode, event)
            }
        }
    }

    /** Shows the next item in the custom list.  */
    private fun moveToNextItem(): Boolean {
        ...
        // Return true if handled successfully, otherwise return false.
        return false
    }

    /** Shows the previous item in the custom list.  */
    private fun moveToPreviousItem(): Boolean {
        ...
        // Return true if handled successfully, otherwise return false.
        return false
    }
}

Java

public final class GesturesActivity extends Activity {

 @Override /* KeyEvent.Callback */
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
   case KeyEvent.KEYCODE_NAVIGATE_NEXT:
    // Do something that advances a user View to the next item in an ordered list.
    return moveToNextItem();
   case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS:
    // Do something that advances a user View to the previous item in an ordered list.
    return moveToPreviousItem();
  }
  // If you did not handle it, let it be handled by the next possible element as determined by the Activity.
  return super.onKeyDown(keyCode, event);
 }

 /** Shows the next item in the custom list. */
 private boolean moveToNextItem() {
  boolean handled = false;
  ...
  // Return true if handled successfully, otherwise return false.
  return handled;
 }

 /** Shows the previous item in the custom list. */
 private boolean moveToPreviousItem() {
  boolean handled = false;
  ...
  // Return true if handled successfully, otherwise return false.
  return handled;
 }
}

Sprawdzone metody

  • Zapoznaj się z dokumentem KeyEvent i KeyEvent.Callback, aby dostarczać kluczowe zdarzenia do View i Activity.
  • Zachowaj konsekwencję w kierunku działania: „przesuń nadgarstek od siebie”. w przypadku następny i „obrót nadgarstka do siebie” do poprzedniego elementu.
  • Ustaw dotyk równolegle do gestu.
  • Prześlij opinię wizualną.
  • Nie używaj kodu dostępu do funkcji, która będzie w przeciwieństwie do reszty systemu. Na przykład nie używaj nazwy KEYCODE_NAVIGATE_NEXT, aby anulować działanie lub przejść do na osi lewa i prawej z ruchami.
  • Nie przechwytuj kluczowych zdarzeń w przypadku elementów, które nie są częścią interfejsu użytkownika, np. widokach znajdujących się poza ekranem lub częściowo i konkretnie. Tak samo jak w przypadku każdego kluczowego zdarzenia.
  • Nie interpretuj powtarzających się gestów gestów we własnych własnych gestach. Może to kolidować z „potrząsaniem nadgarstka” gest.
  • Aby widok mógł odbierać kluczowe zdarzenia związane z gestami, musi mieć skupienie; zobacz View.setFocusable().

    Gesty są traktowane jako kluczowe zdarzenia, powoduje przejście z „trybu dotykowego”. które mogą wywołać nieoczekiwane rzeczy. Użytkownicy mogą przełączać się między trybem dotykowym, gestów, może być potrzebna metoda View::setFocusableInTouchmode(). W niektórych konieczne może być również użycie setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS) tak że gdy zaznaczenie zmieni się po przejściu na lub z trybu dotykowego, który przyciąga uwagę.

  • Używaj tych identyfikatorów: requestFocus() i clearFocus() ostrożnie:
    • Podczas wywoływania usługi requestFocus() upewnij się, że jest on odpowiedni dla i ustaw ostrość. Jeśli widok znajduje się poza ekranem lub jest zasłonięty przez inny widok, mogą wystąpić niespodzianki, gdy gesty wywołują wywołanie zwrotne.
    • Metoda clearFocus() inicjuje wyszukiwanie skupienia w celu znalezienia kolejnego odpowiedni widok. W zależności od hierarchii widoków to wyszukiwanie może i wymagają nieskomplikowanych obliczeń. Może to też spowodować przypisanie fokusu w oglądaniu, którym nie chcesz się skupić.
  • Kluczowe zdarzenia są wyświetlane jako pierwsze w widoku z zaznaczeniem w hierarchii. Jeśli aktywny widok nie obsługuje zdarzenia, czyli zwraca false – zdarzenie nie jest wyświetlane w widoku nadrzędnym, nawet czy jest skupiony i ma KeyListener. Zdarzenie jest natomiast przekazywane do bieżącego działania i utrzymując hierarchię widoków.

    Dlatego konieczne może być rejestruje wszystkie zdarzenia na wyższym poziomie, a następnie przekazuje odpowiednie kody. Możesz też podklasować aktywność i zastąpić Metoda dispatchKeyEvent(KeyEvent event) do przechwytywania kluczy w razie potrzeby lub obsługi, gdy nie są obsługiwane niższych warstw.