Handgelenksgesten auf Wear OS verwenden

Handgelenkgesten ermöglichen schnelle, einhändige Interaktionen mit deiner App wenn ein Touchscreen unpraktisch ist.

Nutzende können zum Beispiel scrollen, über Benachrichtigungen mit einer Hand, während Sie eine Tasse Wasser mit der Sonstiges. Weitere Anwendungsfälle für Handgelenksgesten:

  • Wenn man in einer Jogging-App durch vertikale Bildschirme navigiert, die zurückgelegten Schritte, die verstrichene Zeit und das aktuelle Tempo
  • In einer Reise-App durch Flug- und Gateinformationen scrollen
  • In einer Nachrichten-App durch Artikel scrollen

Handgelenksgesten auf einer Smartwatch prüfen Gerät aktivieren, vergewissern Sie sich, dass Gesten durch Auswahl von Einstellungen > Erweiterte Funktionen > Touch-Gesten > Handgelenksgesten An: Füllen Sie dann die Anleitung für Touch-Gesten auf der Smartwatch durch Auswahl von Anleitung starten.

Hinweis:Das Schütteln des Handgelenks ist die systemweite Zurück-Bewegung bzw. die Rückgängig-Funktion. und kann nicht von Apps angepasst werden.

Handgelenksgesten können auf folgende Arten verwendet werden, wie in diesem Leitfaden beschrieben:

Jede Handgelenksgeste wird einer int-Konstante vom KeyEvent enthalten, wie in der folgenden Tabelle dargestellt:

Touch-Geste Schlüsselereignis Beschreibung
Handgelenk schnell von sich weg drehen KEYCODE_NAVIGATE_NEXT Dieser Schlüsselcode wird zum nächsten Element übertragen.
Handgelenk schnell zu sich drehen KEYCODE_NAVIGATE_PREVIOUS Dieser Schlüsselcode wird zum vorherigen Element verschoben.

Geschwungenes Layout zur Unterstützung von Handgelenksgesten

Die Klasse WearableRecyclerView bietet eine gekrümmte für Listen erstellen und unterstützt Handgelenksgesten. Die Klasse verfügt über vordefinierte Aktionen für Handgelenkbewegungen, wenn die Ansicht im Fokus ist. Informationen zur Verwendung der Klasse WearableRecyclerView erhalten Sie weitere Informationen unter Listen unter Wear OS erstellen. Weitere Informationen finden Sie in den Best Practices dieses Leitfadens.

Hinweis: Die Klasse WearableRecyclerView ersetzt eine ähnliche, <ph type="x-smartling-placeholder"></ph> verworfen in der Wearable-Supportbibliothek.

Auch wenn Sie ein WearableRecyclerView verwenden, sollten Sie Konstanten aus KeyEvent . Die vordefinierten Aktionen können überschrieben werden, indem eine Unterklasse der WearableRecyclerView und erneute Implementierung der onKeyDown()-Rückruf. Das Verhalten kann vollständig deaktiviert werden. mit setEnableGestureNavigation(false). Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Tastaturaktionen ausführen.

Schlüsselereignisse direkt verwenden

Du kannst Schlüsselereignisse außerhalb von WearableRecyclerView verwenden, um neue Aktionen als Reaktion auf Gesten auszulösen Ereignisse. Wichtig: Diese Bewegungsereignisse werden erkannt, wenn sich ein Gerät im Aktivmodus aktiviert sind und wie alle Schlüsselereignisse ausgeliefert werden.

Eine Klasse, die sich auf eine Nutzerinteraktion bezieht, z. B. View oder ein Activity, und das implementiert KeyEvent.Callback kann Daten zu Schlüsselereignissen erfassen, die mit Handgelenkbewegungen ebenso wie andere Schlüsselereignisse. Das Android-Framework ruft View oder Activity auf, sich auf die Schlüsselereignisse konzentrieren. Bei Touch-Gesten ist das onKeyDown() wird beim Auftreten von Gesten aufgerufen.

Beispielsweise kann eine App vordefinierte Aktionen in einem View überschreiben. oder Activity, die KeyEvent.Callback so implementiert:

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

Best Practices

  • KeyEvent ansehen und KeyEvent.Callback Seiten für die Übermittlung von Schlüsselereignissen an View und Activity.
  • Einheitliche Ausrichtung beibehalten: „Handgelenk weg drehen“ verwenden für „Weiter“ und „Dreh das Handgelenk schnell rein“ zurück.
  • Halte für eine Touch-Geste parallele Berührungen ein.
  • Visuelles Feedback geben.
  • Verwenden Sie keinen Schlüsselcode, um Funktionen zu implementieren, die und nicht mit dem Rest des Systems. Verwenden Sie beispielsweise KEYCODE_NAVIGATE_NEXT, um eine Aktion abzubrechen oder zu navigieren der linken und rechten Achse.
  • Schlüsselereignisse nicht für Elemente abfangen, die nicht Teil des wie z. B. Ansichten, die nicht auf dem Bildschirm zu sehen sind oder nur teilweise sichtbar sind gesprochen. Dies entspricht dem für alle Schlüsselereignisse.
  • Interpretieren Sie wiederholte Wischbewegungen nicht in Ihre eigene neuartige Geste. Dies könnte zu Konflikten mit der vom System ausgeführten „Schütteln des Handgelenks“ führen. Touch-Geste.
  • Damit eine Ansicht Gesten-Schlüsselereignisse empfangen kann, muss sie über verfügen. fokus; siehe View.setFocusable().

    Da Gesten als Schlüsselereignisse behandelt werden, lösen sie einen Wechsel aus dem Touch-Modus die zu unerwarteten Ergebnissen führen, Dinge. Da Nutzende abwechselnd zwischen Touch- und können Sie die Methode View::setFocusableInTouchmode() verwenden. In einigen kann es auch erforderlich sein, setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS), also Wenn sich der Fokus nach einem Wechsel zum oder vom Touchmodus ändert, in den Fokus rückt.

  • requestFocus() und clearFocus() vorsichtig sein: <ph type="x-smartling-placeholder">
      </ph>
    • Wenn du requestFocus() aufrufst, achte darauf, dass es für den fokussiert werden soll. Wenn das Bild nicht vom Bildschirm sichtbar ist oder von einer anderen Ansicht verdeckt wird, können Überraschungen auftreten, wenn Gesten Rückrufe auslösen.
    • Die Methode clearFocus() initiiert eine Fokussuche, um eine andere zu finden. für die richtige Ansicht auswählen. Je nach Ansichtshierarchie kann diese Suche nicht triviale Berechnungen erfordern. Außerdem kann er Ihnen am Ende in eine Ansicht verschieben, bei der Sie nicht erwarten, dass sie im Fokus ist.
  • Schlüsselereignisse werden zuerst in der Ansicht ausgeliefert, wobei der Fokus in der Ansicht liegt Hierarchie. Wenn die fokussierte Ansicht das Ereignis nicht verarbeitet, d. h., es wird zurückgegeben, false: Das Ereignis wird nicht an die übergeordnete Ansicht gesendet, auch nicht wenn es fokussiert werden kann und ein KeyListener hat. Stattdessen wird das Ereignis an die aktuelle Aktivität geliefert. der Ansichtshierarchie im Fokus.

    Daher kann es notwendig sein, alle Ereignisse auf der höheren Ebene erfassen und dann die relevanten Codes weitergeben. Alternativ können Sie die Aktivität ableiten und die dispatchKeyEvent(KeyEvent event)-Methode zum Abfangen von Schlüsseln bei Bedarf bearbeiten oder bearbeiten, niedrigeren Ebenen.