From d10df93b7cb0f1ea91b4d9f97d9ea64a0cc0c73e Mon Sep 17 00:00:00 2001
From: Bert McMeen
For examples of how to use this feature, +
For information about this API, see Watch Face Complications.
-Wear 2.0 introduces two new widgets, navigation drawer and action drawer. These @@ -233,6 +233,24 @@ This allows users to enter text on Wear using the system default IME or third pa Input Method Framework.
++ Wrist gestures can enable quick, one-handed interactions with your app + when use of a touch screen is inconvenient. The following + wrist gestures + are available for use by apps: +
+ +For more information, see + + Wrist Gestures. +
+ Wrist gestures can enable quick, one-handed interactions with your app + when use of a touch screen is inconvenient. For example, a user can scroll + through notifications with one hand while holding a cup of water with the + other. Other examples of using wrist gestures when a touch screen would + be inconvenient include: +
+ ++ To review the wrist gestures on your watch, first confirm gestures are + turned on by selecting Settings > Gestures > Wrist Gestures + On. (Wrist gestures are on by default.) Then complete the + Gestures tutorial on the watch (Settings > Gestures > + Launch Tutorial). +
+ ++ The following gestures from the Android Wear + Help are unavailable to apps: +
+ ++ Wrist gestures can be used in these ways: +
+ +
+ Each wrist gesture is mapped to an int
constant from the
+ KeyEvent
+ class, as shown in the following table:
+
+ Gesture + | ++ KeyEvent + | ++ Description + | +
---|---|---|
+ Flick wrist out + | ++ + KEYCODE_NAVIGATE_NEXT + | ++ This key code goes to the next item. + | +
+ Flick wrist in + | ++ + KEYCODE_NAVIGATE_PREVIOUS + | ++ This key code goes to the previous item. + | +
+ A
+ WearableListView
has predefined actions for occurrences of
+ wrist gestures when the View has the focus. For more information, see
+ Best Practices. For information about using
+ WearableListView
, see Creating
+ Lists.
+
+ Even if you use a WearableListView
, you may want to use
+ constants from the KeyEvent
+ class. The predefined actions can be overridden by subclassing the
+ WearableListView
and re-implementing the
+ onKeyDown()
callback. The behavior can be disabled entirely
+ by using setEnableGestureNavigation(false)
. Also see
+
+ Handling Keyboard Actions.
+
+ You can use key events outside of a
+ WearableListView
to trigger new actions in response to gesture
+ events. Importantly, these gesture events:
+
+ Specifically, these events are delivered to the top Activity, to the View
+ with keyboard focus. Just as any other key event, a class that relates to
+ user interaction (such as a View or an Activity) that implements
+
+ KeyEvent.Callback
can listen to key events that relate to
+ wrist gestures. The Android framework calls the View or Activity that has
+ the focus with the key events; for gestures, the onKeyDown()
+ method callback is called when gestures occur.
+
+ As an example, an app may override predefined actions in a View or
+ Activity (both implementing KeyEvent.Callback
) as follows:
+
+public final class GesturesActivity extends Activity { + + @Override /* KeyEvent.Callback */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_NAVIGATE_NEXT: + // Do something that advances a user View to the next item in an ordered list. + return moveToNextItem(); + case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS: + // Do something that advances a user View to the previous item in an ordered list. + return moveToPreviousItem(); + } + // If you did not handle it, let it be handled by the next possible element as deemed by the Activity. + return super.onKeyDown(keyCode, event); + } + + /** Shows the next item in the custom list. */ + private boolean moveToNextItem() { + boolean handled = false; + ⦠+ // Return true if handled successfully, otherwise return false. + return handled; + } + + /** Shows the previous item in the custom list. */ + private boolean moveToPreviousItem() { + boolean handled = false; + ⦠+ // Return true if handled successfully, otherwise return false. + return handled; + } +} ++ +
KeyEvent
+ and
+ KeyEvent.Callback
pages for the delivery of key events to
+ your View and Activity.
+ KEYCODE_NAVIGATE_NEXT
to cancel an action or to navigate the
+ left-right axis with flicks.
+ setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS)
so
+ that when focus changes after a change to or from "Touch mode," your
+ intended View gets the focus.
+ requestFocus()
and clearFocus()
+ carefully:
+
+ requestFocus()
, be sure that the View really should have
+ focus. If the View is offscreen, or is covered by another View,
+ surprises can occur when gestures trigger callbacks.
+
+ clearFocus()
initiates a focus search to find another
+ suitable View. Depending on the View hierarchy, this search might
+ require non-trivial computation. It can also end up assigning focus
+ to a View you donât expect to receive focus.
+ false
), the event is not delivered to the parent View, even
+ if it can receive focus and has a
+ KeyListener. Rather, the event is delivered to the current Activity
+ holding the View hierarchy with focus. Thus, it may be necessary to
+ catch all events at the higher level and then pass relevant codes down.
+ Alternatively, you might subclass the Activity and override the
+
+ dispatchKeyEvent(KeyEvent event)
method to ensure that keys
+ are intercepted when necessary, or are handled when not handled at
+ lower layers.
+