Durch Wischen von links nach rechts kann eine Wear OS-Aktivität beendet werden. Wenn die App horizontales Scrollen hat, wischt der Nutzer zum Rand des Inhalts und wischt dann von links nach rechts. Durch Drücken der Ein/Aus-Taste kehrt der Nutzer zum Zifferblatt zurück.
Die Wischgeste zum Schließen
Nutzer wischen von links nach rechts, um den aktuellen Bildschirm zu schließen. Daher empfehlen wir, Folgendes zu verwenden:
- Vertikale Layouts
- Inhaltscontainer
Außerdem solltest du in deiner App keine horizontalen Wischgesten verwenden.
Aktivität schließen
Aktivitäten unterstützen automatisch das Wischen zum Schließen. Wenn Sie eine Aktivität von links nach rechts wischen, wird die Aktivität verworfen und die App navigiert im Back Stack nach unten.
Fragment schließen
Wenn das Schließen durch Wischen in Fragmenten unterstützt werden soll, müssen Sie die Ansicht, die das Fragment enthält, in der Klasse
SwipeDismissFrameLayout
zusammenfassen. Das solltet ihr bei der Entscheidung, ob Fragmente verwendet werden, berücksichtigen. Verwenden Sie die Klasse SwipeDismissFrameLayout
, wie im folgenden Beispiel gezeigt:
Kotlin
class SwipeDismissFragment : Fragment() { private val callback = object : SwipeDismissFrameLayout.Callback() { override fun onSwipeStarted(layout: SwipeDismissFrameLayout) { // Optional } override fun onSwipeCanceled(layout: SwipeDismissFrameLayout) { // Optional } override fun onDismissed(layout: SwipeDismissFrameLayout) { // Code here for custom behavior, such as going up the // back stack and destroying the fragment but staying in the app. } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View = SwipeDismissFrameLayout(activity).apply { // If the fragment should fill the screen (optional), then in the layout file, // in the androidx.wear.widget.SwipeDismissFrameLayout element, // set the android:layout_width and android:layout_height attributes // to "match_parent". inflater.inflate( R.layout.swipe_dismiss_frame_layout, this, false ).also { inflatedView -> addView(inflatedView) } addCallback(callback) } }
Java
public class SwipeDismissFragment extends Fragment { private final Callback callback = new Callback() { @Override public void onSwipeStart() { // Optional } @Override public void onSwipeCancelled() { // Optional } @Override public void onDismissed(SwipeDismissFrameLayout layout) { // Code here for custom behavior, such as going up the // back stack and destroying the fragment but staying in the app. } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { SwipeDismissFrameLayout swipeLayout = new SwipeDismissFrameLayout(getActivity()); // If the fragment should fill the screen (optional), then in the layout file, // in the androidx.wear.widget.SwipeDismissFrameLayout element, // set the android:layout_width and android:layout_height attributes // to "match_parent". View inflatedView = inflater.inflate(R.layout.swipe_dismiss_frame_layout, swipeLayout, false); swipeLayout.addView(inflatedView); swipeLayout.addCallback(callback); return swipeLayout; } }
Hinweis:Wenn Sie Fragmente in Ihrer Aktivität verwenden, verwenden Sie FragmentManager.add
anstelle von FragmentManager.replace
, um die Wischgeste zum Schließen zu unterstützen.
So wird das vorherige Fragment unter dem oberen Fragment gerendert, während es weggewischt wird.
Horizontal scrollbare Ansichten
In einigen Fällen, z. B. in einer Ansicht mit einer Karte, die Schwenken unterstützt, kann die Benutzeroberfläche das horizontale Wischen nicht verhindern. In diesem Szenario haben Sie zwei Möglichkeiten:
- Wenn der Back Stack kurz ist, kann der Nutzer durch Drücken der Ein/Aus-Taste die App schließen und zum Startbildschirm des Zifferblatts zurückkehren.
- Wenn Sie möchten, dass der Nutzer im Back Stack nach unten geht, können Sie die Ansicht in einem
SwipeDismissFrameLayout
-Objekt zusammenfassen, das das Wischen am Rand unterstützt. Edge-Wischen ist aktiviert, wenn die Ansicht oder ihre untergeordneten Elementetrue
von einemcanScrollHorizontally()
-Aufruf zurückgeben. Durch „Edge-Wischen“ können Nutzer die Ansicht schließen, indem sie von den 10% ganz links auf dem Bildschirm statt irgendwo in der Ansicht wischen.
Die folgenden Beispiele zeigen, wie eine Ansicht in ein SwipeDismissFrameLayout
-Objekt eingebunden wird:
<androidx.wear.widget.SwipeDismissFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/swipe_dismiss_root" > <TextView android:id="@+id/test_content" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="Swipe me to dismiss me." /> </androidx.wear.widget.SwipeDismissFrameLayout>
Kotlin
activity?.findViewById<SwipeDismissFrameLayout>(R.id.swipe_dismiss_root)?.apply { addCallback(object : SwipeDismissFrameLayout.Callback() { override fun onDismissed(layout: SwipeDismissFrameLayout) { layout.visibility = View.GONE } }) }
Java
SwipeDismissFrameLayout testLayout = (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); testLayout.addCallback(new SwipeDismissFrameLayout.Callback() { @Override public void onDismissed(SwipeDismissFrameLayout layout) { layout.setVisibility(View.GONE); } } );
Nicht empfohlen: „Zum Schließen wischen“ deaktivieren
Im Allgemeinen raten wir davon ab, „Zum Schließen wischen“ zu deaktivieren, da der Nutzer davon ausgeht, jeden Bildschirm mit einem Wischen zu schließen. In einem Ausnahmefall kannst du das Standarddesign in einer
Stilressource erweitern und das Attribut android:windowSwipeToDismiss
auf false
setzen, wie im folgenden Codebeispiel gezeigt:
<resources> <style name="AppTheme" parent="@android:style/Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> </resources>
Du kannst dann Nutzer bei der ersten Verwendung deiner App darüber informieren, dass sie die App durch Drücken der Ein/Aus-Taste beenden können.
Mit der Ein/Aus-Taste schließen
Durch Drücken der physischen Ein/Aus-Taste wird ein Ein/Aus-Taste-Ereignis gesendet. Daher kannst du die Ein/Aus-Taste nicht als Zurück-Taste oder für die allgemeine Navigation verwenden.
Durch Drücken der Ein/Aus-Taste gelangt der Nutzer zurück zum Startbildschirm des Zifferblatts. Bitte beachten Sie die folgenden beiden Ausnahmen:
- Wenn sich der Nutzer in einem Input Method Editor (IME) befindet, z. B. auf einem Bildschirm zur Handschrifterkennung, wird durch Drücken der Schaltfläche der IME geschlossen und zur App zurückgeleitet.
- Wenn sich der Nutzer auf dem Zifferblatt befindet, wird durch Drücken der Hardwaretaste der App Launcher geöffnet.
Hinweis: Wenn die Ein/Aus-Taste gedrückt wird, gibt die Methode
isFinishing()
der Klasse Activity
nicht true
zurück und Sie können das Schlüsselereignis nicht abfangen.
Weitere Informationen finden Sie unter Navigation.