退出全屏的Activity

最后更新于:2022-04-01 01:42:02

> 编写: [roya](https://github.com/RoyaAoki) 原文:[https://developer.android.com/training/wearables/ui/exit.html](https://developer.android.com/training/wearables/ui/exit.html) 默认情况下,用户可以从左到右划动退出Android Wear activities。如果app含有水平水滚的内容,用户首先滚动至内容边缘然后再次从左到右滑动可以退出app。 对于更加沉浸式的体验,比如在app中可以滚动地图到任何位置,你可以在你的app中禁用滑动退出手势,然而,如果你禁用了这个,你必须使用Wearable UI库中的 _DismissOverlayView_ 类实现long-press-to-dismiss UI让用户退出你的app。你当然也需要在用户第一次运行你的app的时候提醒用户可以长按退出app。 更多关于退出Android Wear activities的设计指南,请查看[Breaking out of the card](https://developer.android.com/design/wear/structure.html#Custom)。 ### 禁用Swipe-To-Dismiss手势 如果你的app要干涉滑动退出手势的用户交互模型,你在你的app中可以禁用它。为了在你的app中禁用滑动退出手势,继承默认的theme然后设置 _android:windowSwipeToDismiss_ 属性为 _false_: ~~~ <style name="AppTheme" parent="Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> ~~~ 如果你禁用了这个手势,你需要实现长按退出UI元素以让用户可以退出你的app,类似下面章节的描述: ### 实现长按忽略元素 要在你的[activity](# "An activity represents a single screen with a user interface.")中使用 _DissmissOverlayView_ 类,添加这个元素到你的layout解释文件,让它全屏且覆盖在所有其他view上,例子: ~~~ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent"> <!-- other views go here --> <android.support.wearable.view.DismissOverlayView android:id="@+id/dismiss_overlay" android:layout_height="match_parent" android:layout_width="match_parent"/> <FrameLayout> ~~~ 在你的[activity](# "An activity represents a single screen with a user interface.")中,取得 _DismissOverlayView_ 元素然后设置一些提示文字。这些文字会在用户第一次运行你的app时提醒用户可以使用长按手势退出app。接着用一个 _GestureDetector_ 探测长按动作: ~~~ public class WearActivity extends Activity { private DismissOverlayView mDismissOverlay; private GestureDetector mDetector; public void onCreate(Bundle savedState) { super.onCreate(savedState); setContentView(R.layout.wear_activity); // Obtain the DismissOverlayView element mDismissOverlay = (DismissOverlayView) findViewById(R.id.dismiss_overlay); mDismissOverlay.setIntroText(R.string.long_press_intro); mDismissOverlay.showIntroIfNecessary(); // Configure a gesture detector mDetector = new GestureDetector(this, new SimpleOnGestureListener() { public void onLongPress(MotionEvent ev) { mDismissOverlay.show(); } }); } // Capture long presses @Override public boolean onTouchEvent(MotionEvent ev) { return mDetector.onTouchEvent(ev) || super.onTouchEvent(ev); } } ~~~ 当系统发现长按动作, _DismissOverlayView_ 会显示一个**退出**按钮,当用户点击它,你的[activity](# "An activity represents a single screen with a user interface.")会被终止。
';