退出全屏的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.")会被终止。