• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Handling Keyboard Actions
2
3trainingnavtop=true
4
5@jd:body
6
7<div id="tb-wrapper">
8<div id="tb">
9
10<h2>This lesson teaches you to</h2>
11<ol>
12  <li><a href="#SingleKey">Handle Single Key Events</a></li>
13  <li><a href="#ModifierKey">Handle Modifier Keys</a></li>
14</ol>
15
16</div>
17</div>
18
19
20<p>When the user gives focus to an editable text view such as an {@link android.widget.EditText}
21element and the user has a hardware keyboard attached, all
22input is handled by the system. If, however, you'd like to intercept
23or directly handle the keyboard input yourself, you can do so by implementing callback methods
24from the {@link android.view.KeyEvent.Callback} interface, such as {@link
25android.view.KeyEvent.Callback#onKeyDown onKeyDown()} and {@link
26android.view.KeyEvent.Callback#onKeyMultiple onKeyMultiple()}.</p>
27
28<p>Both the {@link
29android.app.Activity} and {@link android.view.View} class implement the
30{@link android.view.KeyEvent.Callback} interface, so you
31should generally override the callback methods in your extension of these classes as
32appropriate.</p>
33
34<p class="note"><strong>Note:</strong> When handling keyboard events with the {@link
35android.view.KeyEvent} class and related APIs, you should expect that such keyboard
36events come only from a hardware keyboard. You should never rely on receiving key events
37for any key on a soft input method (an on-screen keyboard).</p>
38
39
40<h2 id="SingleKey">Handle Single Key Events</h2>
41
42<p>To handle an individual key press, implement {@link
43android.app.Activity#onKeyDown onKeyDown()} or {@link
44android.app.Activity#onKeyUp onKeyUp()} as appropriate. Usually, you should
45use {@link android.app.Activity#onKeyUp onKeyUp()} if you want to be sure that you receive
46only one event. If the user presses and holds the button, then {@link
47android.app.Activity#onKeyDown onKeyDown()} is called multiple times.</p>
48
49<p>For example, this implementation responds to some keyboard keys to control a game:</p>
50
51<pre>
52&#64;Override
53public boolean onKeyUp(int keyCode, KeyEvent event) {
54    switch (keyCode) {
55        case KeyEvent.KEYCODE_D:
56            moveShip(MOVE_LEFT);
57            return true;
58        case KeyEvent.KEYCODE_F:
59            moveShip(MOVE_RIGHT);
60            return true;
61        case KeyEvent.KEYCODE_J:
62            fireMachineGun();
63            return true;
64        case KeyEvent.KEYCODE_K:
65            fireMissile();
66            return true;
67        default:
68            return super.onKeyUp(keyCode, event);
69    }
70}
71</pre>
72
73
74<h2 id="ModifierKey">Handle Modifier Keys</h2>
75
76<p>To respond to modifier key events such as when a key is combined with Shift or Control, you can
77query the {@link android.view.KeyEvent} that's passed to the callback method. Several methods
78provide information about modifier keys such as {@link android.view.KeyEvent#getModifiers()}
79and {@link android.view.KeyEvent#getMetaState()}. However, the simplest solution is to check whether
80the exact modifier key you care about is being pressed with methods such as
81{@link android.view.KeyEvent#isShiftPressed()} and {@link android.view.KeyEvent#isCtrlPressed()}.
82</p>
83
84<p>For example, here's the {@link android.app.Activity#onKeyDown onKeyDown()} implementation
85again, with some extra handling for when the Shift key is held down with one of the keys:</p>
86
87<pre>
88&#64;Override
89public boolean onKeyUp(int keyCode, KeyEvent event) {
90    switch (keyCode) {
91        ...
92        case KeyEvent.KEYCODE_J:
93            if (event.isShiftPressed()) {
94                fireLaser();
95            } else {
96                fireMachineGun();
97            }
98            return true;
99        case KeyEvent.KEYCODE_K:
100            if (event.isShiftPressed()) {
101                fireSeekingMissle();
102            } else {
103                fireMissile();
104            }
105            return true;
106        default:
107            return super.onKeyUp(keyCode, event);
108    }
109}
110</pre>
111
112
113
114