キーイベントを取得する


Androidでは上下左右キーや検索キーなどのキーを操作するとキーイベントと呼ばれる
イベントが発生します。Androidでキーを使ったアプリケーションを開発したい場合は
このキーイベントを取得し、その内容を判別することで任意の処理を行うようにします。

今日はこのキーイベントを取得する方法について説明したいと思います。

※サンプルコードで検出対象としているキーをバックキーから検索キーに変更しました。
また、記事の加筆修正を行いました。(2011/03/30)

詳しくは続きからご覧ください。

Androidでキーイベントを取得するにはdispatchKeyEventメソッドをオーバーライドします。
以下のサンプルコードを実行すると押されたキーコードがTextViewに表示されます。

1
2
3
4
5
6
7
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
   // キーコード表示
   tv01.setText("KeyCode:"+e.getKeyCode());
 
   return super.dispatchKeyEvent(e);
}

エミュレータ上でこのサンプルコードを動作させると以下の図のようになります。
Hキーを押すと、Hキーのキーコードである36という数字がTextViewに表示されます。

更にdispatchKeyEventメソッドでは、キーが押されたときと
離されたときそれぞれを判別することができますので、細かいキー制御が可能です。

たとえば、検索ボタンが押されたときと離されたときを判別して、
それぞれTextViewの背景色を変えるというような処理を加えると以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
    // キーコードを表示する
    tv01.setText("KeyCode:" + e.getKeyCode());
 
    // 検索ボタンが押されたとき
    if (e.getKeyCode() == KeyEvent.KEYCODE_SEARCH) {
        // ボタンが押し込まれたとき
        if (e.getAction() == KeyEvent.ACTION_DOWN) {
            // 背景色を赤色にする
            tv01.setBackgroundColor(Color.RED);
        }
        // ボタンが離されたとき
        else if (e.getAction() == KeyEvent.ACTION_UP) {
            // 背景色を青色にする
            tv01.setBackgroundColor(Color.BLUE);
        }
    }
 
    return super.dispatchKeyEvent(e);
}

上記サンプルコードをエミュレータで動作させると以下の図のようになります。
検索ボタンを押したときにはTextViewの背景色が赤色に、離したときには青色に変わります。

4 Comments