使用者只要從左向右滑動,即可結束 Wear OS 活動。 如果應用程式提供水平捲動功能,使用者即可前往邊緣離開頁面 再從左向右滑動 按下電源鍵也會讓使用者返回錶面。
滑動關閉手勢
使用者只要從左向右滑動,即可關閉目前的畫面。因此,我們 建議您採用:
- 垂直版面配置
- 內容容器
我們也建議,您的應用程式 水平滑動手勢
關閉活動
活動會自動支援滑動關閉。滑動活動 這會關閉活動和應用程式 向下瀏覽 返回堆疊。
關閉片段
如要在片段中支援滑動關閉,您必須先將
包含片段的檢視畫面
SwipeDismissFrameLayout
類別。請將這一點納入考量
決定是否使用片段使用
SwipeDismissFrameLayout
類別,如以下範例所示:
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; } }
注意:在活動中使用片段時,請使用
FragmentManager.add
敬上
而非
FragmentManager.replace
支援滑動關閉手勢
此方法可確保先前的片段在執行時位於頂端片段下方
。
水平捲動檢視畫面
在某些情況下,例如在包含支援平移功能的檢視畫面中, 使用者介面無法禁止水平滑動在本 情境下,您有兩個選擇:
- 如果返回堆疊太短,使用者可以關閉應用程式並返回 返回錶面主畫面。
- 如果想讓使用者向下返回堆疊,可以包裝檢視畫面
SwipeDismissFrameLayout
物件中,而該物件支援 Edge 滑動。當檢視畫面或其子項傳回時,系統會啟用邊緣滑動功能true
來自canScrollHorizontally()
呼叫。邊緣滑動可讓使用者 從螢幕最左側 10% 滑動 (而非 檢視畫面中任何一處
以下範例說明如何將檢視表納入
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); } } );
不建議使用:停用滑動關閉功能
我們通常不建議停用滑動關閉功能,因為使用者
預期能夠以滑動方式關閉任何畫面。在特殊情況下
可以擴充預設主題
在
樣式資源
然後設定 android:windowSwipeToDismiss
屬性
至 false
,如以下程式碼範例所示:
<resources> <style name="AppTheme" parent="@android:style/Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> </resources>
之後,便可在使用者第一次使用您的應用程式時告知他們 讓使用者只要按下電源按鈕即可關閉應用程式。
使用電源鍵關閉
按下實體電源鍵傳送電源鍵 活動。因此,你無法將電源按鈕做為背面 或一般導覽功能
按下電源鍵後,使用者就會返回錶面主畫面。以下是兩種例外狀況:
- 如果使用者位於輸入法編輯器 (IME),例如手寫 辨識畫面,按下按鈕 關閉 IME,並將使用者返回應用程式。
- 如果使用者位於錶面,請按下硬體按鈕。 開啟應用程式啟動器。
注意:按下電源鍵時,
Activity
類別的
isFinishing()
方法會
不會傳回 true
,且無法攔截按鍵事件。
若需更多資訊,請參閲 導覽。