Użytkownik może zamknąć aktywność na Wear OS, przesuwając palcem od lewej do prawej. Jeśli aplikacja obsługuje przewijanie w poziomie, użytkownik opuszcza aplikację, przechodząc do krawędzi. i przesuń palcem od lewej do prawej. Naciśnięcie przycisku zasilania powoduje też powrót do tarczy zegarka.
Gest przesuwania, aby go zamknąć
Użytkownicy przesuwają palcem od lewej do prawej, aby zamknąć bieżący ekran. Dlatego zalecamy użycie:
- Układy pionowe
- Kontenery treści
Zalecamy też, aby aplikacja nie zawierała gesty przesunięcia w poziomie.
Odrzuć aktywność
Aktywności automatycznie obsługują przesuwanie palcem, aby zamknąć aplikację. Przesuwanie aktywności od lewej do prawej powoduje odrzucenie aktywności, przechodzi w dół po .
Odrzuć fragment
Aby obsługiwać przesuwanie palcem, aby zamknąć go we fragmentach, musisz zawijać elementy
lub widoku zawierającym fragmenty
SwipeDismissFrameLayout
zajęcia. Weź to pod uwagę
przy podejmowaniu decyzji, czy użyć fragmentów. Użyj
SwipeDismissFrameLayout
zgodnie z poniższym przykładem:
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; } }
Uwaga: jeśli w swojej aktywności używasz fragmentów, zastosuj
FragmentManager.add
.
zamiast
FragmentManager.replace
.
aby obsługiwać gest przesuwania, aby go zamknąć.
Dzięki temu poprzedni fragment będzie renderowany pod górnym fragmentem, gdy jest
ją przesunął.
Widoki z możliwością przewijania w poziomie
W niektórych przypadkach, na przykład w widoku zawierającym mapę obsługującą przesuwanie, interfejs nie może zapobiec przesuwaniu w poziomie. W tym dostępne są dwie opcje:
- Jeśli tylny stos jest krótki, użytkownik może zamknąć aplikację i wrócić do niej. na ekran główny tarczy zegarka, naciskając przycisk zasilania.
- Jeśli chcesz, aby użytkownik schodził z tyłu, możesz owinąć widok
w obiekcie
SwipeDismissFrameLayout
, który obsługuje krawędź przesuń palcem. Przesunięcie wzdłuż krawędzi jest włączone, gdy powraca widok lub jego elementy podrzędnetrue
zcanScrollHorizontally()
połączenie. Przesunięcie wzdłuż krawędzi umożliwia użytkownikowi zamknąć widok, przesuwając palcem od 10% ekranu od lewej krawędzi, zamiast w dowolnym miejscu widoku.
Poniższe przykłady pokazują, jak zawijać widok w
SwipeDismissFrameLayout
obiekt:
<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); } } );
Niezalecane: wyłącz funkcję przesuwania, aby ją zamknąć
Zasadniczo nie zalecamy wyłączania tej funkcji, ponieważ
oczekuje zamknięcia dowolnego ekranu po przesunięciu palcem. W wyjątkowym przypadku
możesz rozszerzyć domyślny motyw
w
zasób stylu
i ustawić atrybut android:windowSwipeToDismiss
do false
, jak widać w tym przykładowym kodzie:
<resources> <style name="AppTheme" parent="@android:style/Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> </resources>
Dzięki temu możesz informować użytkowników o pierwszym skorzystaniu z Twojej aplikacji że mogą wyjść z aplikacji przez naciśnięcie przycisku zasilania.
Zamykanie za pomocą przycisku zasilania
Naciśnięcie fizycznego przycisku zasilania powoduje wysłanie klawisza zasilania . Dlatego nie można używać przycisku zasilania jako tylnej części urządzenia, lub do nawigacji.
Po naciśnięciu przycisku zasilania użytkownik wróci na ekran główny tarczy zegarka. Istnieją dwa wyjątki:
- Jeśli użytkownik używa edytora metody wprowadzania (IME), takiego jak pismo odręczne ekran rozpoznawania, naciśnij przycisk zamyka edytor IME i powraca użytkownika do aplikacji.
- Jeśli użytkownik znajduje się przy tarczy zegarka, naciskając przycisk sprzętowy otwiera program uruchamiający aplikacje.
Pamiętaj, że po naciśnięciu przycisku zasilania
Metoda
isFinishing()
klasy Activity
robi
nie zwraca wartości true
i nie można przechwycić kluczowego zdarzenia.
Więcej informacji: Nawigacja