Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
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.
myView.setOnGenericMotionListener{v,ev->
if(ev.action==MotionEvent.ACTION_SCROLL&&
ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)){// Don't forget the negation herevaldelta=-ev.getAxisValue(MotionEventCompat.AXIS_SCROLL)*ViewConfigurationCompat.getScaledVerticalScrollFactor(ViewConfiguration.get(context),context)// Swap these axes to scroll horizontally insteadv.scrollBy(0,delta.roundToInt())true}else{false}}
Java
myView.setOnGenericMotionListener(newView.OnGenericMotionListener(){@OverridepublicbooleanonGenericMotion(Viewv,MotionEventev){if(ev.getAction()==MotionEvent.ACTION_SCROLL&&
ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)){// Don't forget the negation herefloatdelta=-ev.getAxisValue(MotionEventCompat.AXIS_SCROLL)*ViewConfigurationCompat.getScaledVerticalScrollFactor(ViewConfiguration.get(context),context);// Swap these axes to scroll horizontally insteadv.scrollBy(0,Math.round(delta));returntrue;}returnfalse;}});
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:
Öffnen Sie im SDK-Manager den Tab SDK-Tools, um
Android Emulator 26.0.3 oder höher herunterladen.
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:
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-26 (UTC)."],[],[],null,["# Rotary input\n\nSome Wear OS devices contain a physical *rotating side button* . When the user turns the\nbutton, it scrolls your app's current view up or down. This type of input is called\n*rotary input*.\n\n**Note:** This guide refers primarily to handling rotary input using\nView-based UIs. For more information on handling rotary input using Compose for Wear OS, see\n[Rotary input on Compose](/training/wearables/compose/rotary-input).\n\nMany scrollable containers, like\n[ScrollView](/reference/android/widget/ScrollView),\n[ListView](/reference/android/widget/ListView),\n[HorizontalScrollView](/reference/android/widget/HorizontalScrollView),\nand [WearableRecyclerView](/reference/androidx/wear/widget/WearableRecyclerView),\nsupport rotary input if they have focus without requiring any Wear\nOS-specific code.\nHaving focus is an important prerequisite, because on Android 9 (API level\n28) and higher, views don't implicitly receive focus.\n\nFocus best practices\n--------------------\n\n\nTo respond to rotary input events, a scrollable container must have focus.\nRotary input events don't bubble up the view\nhierarchy. If there is no focused view, or if the focused view returns `false` from\n[View.onGenericMotionEvent()](/reference/android/view/View#onGenericMotionEvent(android.view.MotionEvent)),\nthen the event is sent to\n[Activity.onGenericMotionEvent()](/reference/android/app/Activity#onGenericMotionEvent(android.view.MotionEvent)).\n\n\nThe following are best practices around responding to rotary input events:\n\n- Bear in mind that, by default, launching an activity or even tapping on a view does not give it focus, even if it is focusable. To give your view focus, the view must use the [<requestFocus /\u003e](/guide/topics/resources/layout-resource) tag or manually call [View.requestFocus()](/reference/android/view/View#requestFocus()).\n- Mark custom scrollable views as focusable using both `android:focusable=\"true\"` and `android:focusableInTouchMode=\"true\"`.\n- If your scrollable view is attached after [Activity.onCreate()](/reference/android/app/Activity#onCreate(android.os.Bundle))---for example, waiting for a network request to finish before building your UI, call `requestFocus()` after attaching it.\n- If your scrollable view is initially [INVISIBLE](/reference/android/view/View#INVISIBLE) or [GONE](/reference/android/view/View#GONE), call `requestFocus()` when you set it to [VISIBLE](/reference/android/view/View#VISIBLE).\n- If your activity contains multiple scrollable views, choose one to focus using the [<requestFocus /\u003e](/guide/topics/resources/layout-resource) tag. Nested scrolling is not supported with the rotating side button.\n- If your UI contains some other view that takes focus when the user interacts with it---for example, an `InputText`, give the user a way to restore focus to the scrollable view if it loses focus by listening for taps on the scrollable view and calling `requestFocus()` in response.\n\nCustom rotating behavior\n------------------------\n\nIf your scrollable view doesn't natively support rotary input scrolling, or if you want to\nuse your rotary input for something other than scrolling---such as to\nzoom in and out or to turn dials---you can handle the scroll events\nyourself. Remember to make sure your view gains focus, otherwise\nthe events will not come through.\n\nThe following code snippet shows how to use [MotionEvent](/reference/android/view/MotionEvent),\n[InputDeviceCompat](/reference/kotlin/androidx/core/view/InputDeviceCompat),\nand [ViewConfigurationCompat](/reference/androidx/core/view/ViewConfigurationCompat)\nto add custom scrolling to your view: \n\n### Kotlin\n\n```kotlin\nmyView.setOnGenericMotionListener { v, ev -\u003e\n if (ev.action == MotionEvent.ACTION_SCROLL &&\n ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)\n ) {\n // Don't forget the negation here\n val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *\n ViewConfigurationCompat.getScaledVerticalScrollFactor(\n ViewConfiguration.get(context), context\n )\n // Swap these axes to scroll horizontally instead\n v.scrollBy(0, delta.roundToInt())\n true\n } else {\n false\n }\n}\n```\n\n### Java\n\n```java\nmyView.setOnGenericMotionListener(new View.OnGenericMotionListener() {\n @Override\n public boolean onGenericMotion(View v, MotionEvent ev) {\n if (ev.getAction() == MotionEvent.ACTION_SCROLL &&\n ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER)\n ) {\n // Don't forget the negation here\n float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) *\n ViewConfigurationCompat.getScaledVerticalScrollFactor(\n ViewConfiguration.get(context), context\n );\n\n // Swap these axes to scroll horizontally instead\n v.scrollBy(0, Math.round(delta));\n\n return true;\n }\n return false;\n }\n});\n```\n\nTest using an emulator\n----------------------\n\nUse the [Android Emulator](/studio/run/emulator#about) to simulate rotary input\nscrolling on a Wear device. Launch your Wear app on the emulator to run\nyour project or drag an\nAPK file onto the emulator to install it.\n\nTo test the rotary input on the emulator:\n\n1. From the [SDK manager](/tools/help/sdk-manager), use the **SDK tools** tab to get Android Emulator 26.0.3 or higher.\n2. In Android Studio, select **Tools \\\u003e\n Android \\\u003e AVD Manager** . [Create a new Wear device](/studio/run/managing-avds#createavd) with API 25 or higher.\n3. [Run the emulator from Android Studio](/studio/run/emulator#runningapp).\n4. Click the three-dot overflow menu at the bottom of the emulator toolbar. Click the **Rotary input** tab in the new window to open the rotary input interface and try rotary input scrolling.\n\nThe following video shows rotary input in the emulator:"]]