Un utente può uscire da un'attività di Wear OS scorrendo da sinistra a destra. Se l'app consente lo scorrimento orizzontale, l'utente esce navigando verso il bordo dei contenuti e scorrendo da sinistra a destra. Anche la pressione del tasto di accensione riporta l'utente al quadrante.
Il gesto di scorrimento per ignorare
Gli utenti fanno scorrere il dito 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 fare in modo che l'app non contenga gesti di scorrimento in orizzontale.
Ignorare un'attività
Le attività supportano automaticamente lo scorrimento per ignorare. Scorrimento di un'attività da sinistra a destra comporta la chiusura dell'attività e l'app fa scorrere verso il basso back stack.
Ignora un frammento
Per supportare la funzionalità di scorrimento per ignorare in frammenti, devi racchiudere la classe
vista contenente frammenti
SwipeDismissFrameLayout
. Aspetti da considerare
al momento di decidere 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 della tua attività, usa
FragmentManager.add
:
anziché
FragmentManager.replace
per supportare il gesto di scorrimento per ignorare.
Ciò contribuisce a garantire che il frammento precedente venga visualizzato sotto il frammento superiore mentre si trova
sono andate via.
Visualizzazioni scorrevoli orizzontali
In alcuni casi, ad esempio in una visualizzazione contenente una mappa che supporta la panoramica, l'interfaccia utente non è in grado di impedire lo scorrimento orizzontale. In questo puoi scegliere tra due opzioni:
- Se lo stack posteriore è breve, l'utente può chiudere l'app e tornare alla schermata Home del quadrante premendo il tasto di accensione.
- Se vuoi che l'utente scenda in secondo piano, puoi eseguire il wrapping della vista
in un oggetto
SwipeDismissFrameLayout
, che supporta il perimetro scorri. Lo scorrimento dai bordi viene attivato quando tornano la visualizzazione o le relative immagini secondarietrue
da uncanScrollHorizontally()
chiamata. Lo scorrimento dal bordo consente all'utente chiudi la visualizzazione scorrendo dal 10% all'estrema sinistra dello schermo, anziché in qualsiasi punto della vista.
I seguenti esempi mostrano come aggregare una vista in una
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: disattiva lo scorrimento per ignorare
In genere sconsigliamo di disattivare lo scorrimento per ignorare, perché l'utente
prevede di chiudere qualsiasi schermata con un gesto. In un caso eccezionale,
puoi estendere il tema predefinito
in un
risorsa di stile
e imposta l'attributo android:windowSwipeToDismiss
a false
, come mostrato nel seguente esempio di codice:
<resources> <style name="AppTheme" parent="@android:style/Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> </resources>
Dopodiché puoi informare gli utenti quando utilizzano la tua app per la prima volta di poter uscire dall'app premendo il tasto di accensione.
Ignora con il tasto di accensione
Una pressione del tasto di accensione fisico invia un tasto di accensione . Pertanto, non puoi utilizzare il tasto di accensione come retro 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 si trova in un editor del metodo di input (Input Method Editor, IME), ad esempio una scrittura a mano libera schermata di riconoscimento, premendo il pulsante chiude l'IME e restituisce l'utente all'app.
- Se l'utente è vicino al quadrante, quando preme il pulsante hardware consente di aprire Avvio applicazioni.
Tieni presente che quando premi il tasto di accensione, la
isFinishing()
della classe Activity
non
non restituisce true
e non puoi intercettare l'evento chiave.
Per ulteriori informazioni, vedi Navigazione.