| page.title=Exiting Full-Screen Activities |
| |
| @jd:body |
| |
| <div id="tb-wrapper"> |
| <div id="tb"> |
| <h2>This lesson teaches you to</h2> |
| <ol> |
| <li><a href="#disable-swipe">Disable the Swipe-To-Dismiss Gesture</a></li> |
| <li><a href="#long-press">Implement the Long Press to Dismiss Pattern</a></li> |
| </ol> |
| <h2>You should also read</h2> |
| <ul> |
| <li><a href="{@docRoot}design/wear/index.html">Android Wear Design Principles</a></li> |
| </ul> |
| </div> |
| </div> |
| |
| |
| <p>By default, users exit Android Wear activities by swiping from left to right. If the app |
| contains horizontally scrollable content, users first have to navigate to the edge of the |
| content and then swipe again from left to right to exit the app.</p> |
| |
| <p>For more immersive experiences, like an app that can scroll a map in any direction, you can |
| disable the swipe to exit gesture in your app. However, if you disable it, you must implement |
| the long-press-to-dismiss UI pattern to let users exit your app using the |
| <code>DismissOverlayView</code> class from the Wearable UI Library. |
| You must also inform your users the first time they run your app that they can exit using |
| a long press.</p> |
| |
| <p>For design guidelines about exiting Android Wear activities, see |
| <a href="{@docRoot}design/wear/structure.html#Custom">Breaking out of the card</a>.</p> |
| |
| |
| <h2 id="disable-swipe">Disable the Swipe-To-Dismiss Gesture</h2> |
| |
| <p>If the user interaction model of your app interferes with the swipe-to-dismiss gesture, |
| you can disable it for your app. To disable the swipe-to-dismiss gesture in your app, extend |
| the default theme and set the <code>android:windowSwipeToDismiss</code> attribute to |
| <code>false</code>:</p> |
| |
| <pre> |
| <style name="AppTheme" parent="Theme.DeviceDefault"> |
| <item name="android:windowSwipeToDismiss">false</item> |
| </style> |
| </pre> |
| |
| <p>If you disable this gesture, you must implement the long-press-to-dismiss UI pattern to let users |
| exit your app, as described in the next section.</p> |
| |
| |
| <h2 id="long-press">Implement the Long Press to Dismiss Pattern</h2> |
| |
| <p>To use the <code>DissmissOverlayView</code> class in your activity, add this element to |
| your layout definition such that it covers the whole screen and is placed above all other views. |
| For example:</p> |
| |
| <pre> |
| <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> |
| </pre> |
| |
| <p>In your activity, obtain the <code>DismissOverlayView</code> element and set some introductory |
| text. This text is shown to users the first time they run your app to inform them that they |
| can exit the app using a long press gesture. Then use a <code>GestureDetector</code> to detect |
| a long press:</p> |
| |
| <pre> |
| 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 dispatchTouchEvent(MotionEvent e) { |
| return mDetector.onTouchEvent(e) || super.dispatchTouchEvent(e); |
| } |
| } |
| </pre> |
| |
| <p>When the system detects a long press gesture, <code>DismissOverlayView</code> shows an |
| <strong>Exit</strong> button, which terminates your activity if the user presses it.</p> |