Drehknopf

Einige Wear OS-Geräte haben eine drehbare Seitentaste. Dreht die nutzende Person die können Sie die aktuelle Ansicht Ihrer App nach oben oder unten scrollen. Diese Art der Eingabe wird Drehknopf.

Hinweis: Diese Anleitung bezieht sich hauptsächlich auf die Handhabung des Drehknopfs mit Ansichtsbasierte Benutzeroberflächen Weitere Informationen zur Verwendung des Drehknopfs in Compose für Wear OS findest du unter Drehknopf beim Schreiben:

Viele scrollbare Container, z. B. ScrollView, ListView, HorizontalScrollView, und WearableRecyclerView, unterstützen Drehknopf, falls diese im Fokus sind, ohne dass Wearables Betriebssystemspezifischer Code Konzentration ist eine wichtige Voraussetzung, denn unter Android 9 (API-Level 28) und höher werden Aufrufe nicht implizit hervorgehoben.

Fokus auf Best Practices

Damit auf Ereignisse mit Drehknopf reagieren kann, muss ein scrollbarer Container im Fokus sein. Dreheingabeereignisse erscheinen nicht in der Ansicht Hierarchie. Wenn keine fokussierte Ansicht vorhanden ist oder die fokussierte Ansicht false von View.onGenericMotionEvent(), wird das Ereignis an Activity.onGenericMotionEvent()

Im Folgenden finden Sie Best Practices zum Reagieren auf Drehknopfereignisse:

  • Wenn Sie eine Aktivität starten oder auf eine fokussiert es nicht, auch wenn es fokussierbar. Um die Ansicht fokussieren zu können, muss die Ansicht die Funktion <requestFocus /> Taggen oder manuell View.requestFocus() aufrufen.
  • Benutzerdefinierte scrollbare Ansichten mit android:focusable="true" als fokussierbar markieren und android:focusableInTouchMode="true".
  • Wenn Ihre scrollbare Ansicht nach Activity.onCreate() angehängt ist, für Wenn Sie mit dem Erstellen der Benutzeroberfläche auf den Abschluss einer Netzwerkanfrage warten, rufen Sie requestFocus() nach dem Anhängen.
  • Wenn Ihre scrollbare Ansicht anfangs INVISIBLE ist oder GONE, requestFocus() aufrufen, wenn Sie Folgendes festlegen: VISIBLE.
  • Wenn Ihre Aktivität mehrere scrollbare Ansichten umfasst, wählen Sie eine aus, um den Fokus mithilfe der <requestFocus /> Tag. Verschachteltes Scrollen wird bei der rotierenden Taste an der Seite nicht unterstützt.
  • Wenn Ihre Benutzeroberfläche eine andere Ansicht enthält, mit ihr interagiert – zum Beispiel Mit InputText können Nutzer den Fokus wieder auf die scrollbare Ansicht fokussieren wenn der Fokus dadurch verloren geht, dass auf die scrollbare Ansicht getippt wird und requestFocus() als Antwort.

Benutzerdefiniertes Drehverhalten

Wenn Ihre scrollbare Ansicht das Scrollen durch Drehknopf nicht nativ unterstützt oder wenn Sie Verwenden Sie den Drehknopf nicht zum Scrollen, sondern zum Beispiel Heran- und Herauszoomen oder Drehregler drehen – Sie können die Scroll-Ereignisse selbst. Achten Sie darauf, dass Ihr Aufruf fokussiert wird. Andernfalls die Ereignisse nicht durch.

Das folgende Code-Snippet zeigt, wie MotionEvent, InputDeviceCompat, und ViewConfigurationCompat , um Ihrer Ansicht benutzerdefiniertes Scrollen hinzuzufügen:

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

Mit einem Emulator testen

Mit dem Android-Emulator den Drehknopf simulieren Scrollen auf einem Wear-Gerät. Starte deine Wear-App im Emulator, um sie auszuführen Ihr Projekt ein oder ziehen Sie APK-Datei in den Emulator, um sie zu installieren.

So testen Sie den Drehknopf am Emulator:

  1. Öffnen Sie im SDK-Manager den Tab SDK-Tools, um Android Emulator 26.0.3 oder höher herunterladen.
  2. Wählen Sie in Android Studio Tools > Android > AVD-Manager Erstellen Sie ein neues Wear-Gerät mit API 25 oder höher liegen.
  3. Führe den Emulator über Android Studio aus.
  4. Klicken Sie unten in der Emulator-Symbolleiste auf das Dreipunkt-Menü. Klicken Sie auf das Tab Drehknopf im neuen Fenster, um die Oberfläche für den Drehknopf zu öffnen und den Drehknopf zu testen das Scrollen durch Eingabedaten.

Das folgende Video zeigt den Drehknopf im Emulator: