Un utente può uscire da un'attività Wear OS scorrendo da sinistra verso destra. Se l'app ha lo scorrimento orizzontale, l'utente esce andando all'estremità dei contenuti e scorrendo da sinistra a destra. Premendo il tasto di accensione, l'utente torna anche al quadrante.
Il gesto di scorrimento per ignorare
Gli utenti scorrono da sinistra a destra per chiudere la schermata corrente. Pertanto, ti consigliamo di utilizzare quanto segue:
- Layout verticali
- Contenitori di contenuti
Ti consigliamo inoltre di non includere nella tua app gesti di scorrimento orizzontale.
Chiudere un'attività
Le attività supportano automaticamente lo scorrimento per ignorare. Se scorri un'attività da sinistra verso destra, l'attività viene chiusa e l'app si sposta verso il basso nella pila di ritorno.
Ignorare un frammento
Per supportare lo scorrimento per chiudere nei frammenti, devi racchiudere la vista contenente il frammento nella classe
SwipeDismissFrameLayout
. Tienilo presente
quando decidi se utilizzare i frammenti. Utilizza la classe
SwipeDismissFrameLayout
come mostrato nell'esempio seguente:
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; } }
Nota: quando utilizzi frammenti all'interno dell'attività, utilizza
FragmentManager.add
anziché
FragmentManager.replace
per supportare il gesto di scorrimento per chiudere.
In questo modo, il frammento precedente viene visualizzato sotto il frammento superiore mentre viene scorretto.
Visualizzazioni scorrevoli orizzontali
In alcuni casi, ad esempio in una visualizzazione contenente una mappa che supporta la panoramica, l'interfaccia utente non può impedire lo scorrimento orizzontale. In questo scenario, hai due opzioni:
- Se la pila di app è breve, l'utente può ignorare l'app e tornare alla schermata Home del quadrante premendo il tasto di accensione.
- Se vuoi che l'utente scenda nella pila di app precedenti, puoi racchiudere la visualizzazione
in un oggetto
SwipeDismissFrameLayout
, che supporta lo scorrimento laterale. Lo scorrimento laterale è abilitato quando la visualizzazione o i relativi elementi secondari restituisconotrue
da unacanScrollHorizontally()
chiamata. Lo scorrimento laterale consente all'utente di chiudere la visualizzazione scorrendo dal 10% più a sinistra dello schermo, anziché da qualsiasi punto della visualizzazione.
Gli esempi riportati di seguito mostrano come racchiudere una visualizzazione in un
oggetto SwipeDismissFrameLayout
:
<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); } } );
Opzione non consigliata: disattivare lo scorrimento per chiudere
In genere sconsigliamo di disattivare lo scorrimento per chiudere, perché l'utente
si aspetta di chiudere qualsiasi schermata con uno scorrimento. In un caso eccezionale,
puoi estendere il tema predefinito
in una
risorsa di stile
e impostare l'attributo android:windowSwipeToDismiss
su false
, come mostrato nell'esempio di codice seguente:
<resources> <style name="AppTheme" parent="@android:style/Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> </resources>
Al primo utilizzo della tua app, puoi informare gli utenti che possono uscirne premendo il tasto di accensione.
Chiusura con il tasto di accensione
Una pressione del tasto di accensione fisico invia un evento tasto di accensione. Pertanto, non puoi utilizzare il tasto di accensione come pulsante Indietro o per la navigazione in generale.
Quando viene premuto, il tasto di accensione riporta l'utente alla schermata Home del quadrante. Esistono due eccezioni:
- Se l'utente è in un Input Method Editor (IME), ad esempio una schermata di riconoscimento della scrittura a mano libera, la pressione del pulsante chiude l'IME e riporta l'utente all'app.
- Se l'utente è sul quadrante, premendo il pulsante hardware si apre Avvio app.
Tieni presente che quando viene premuto il tasto di accensione, il metodo
isFinishing()
della classe Activity
non restituisce true
e non puoi intercettare l'evento chiave.
Per ulteriori informazioni, consulta Navigazione.