Vollbildaktivitäten auf Wear beenden

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 Elemente true von einem canScrollHorizontally()-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.