dispatchKeyEventでkeyeventをハンドリングする方法

2019年5月13日

dispatchKeyEventを使用したキーイベントのハンドリング

今回はAndroidのdispatchKeyEventでキーイベントをハンドリングする方法を説明します。

dispatchKeyEventを使用すると以下のような使い分けが可能になります。

  • 全画面共通でバックキー押下時にアプリ終了確認ダイアログを出す
  • 特定のレイアウト表示時のバックキー押下はレイアウトを閉じ、
    それ以外でのバックキー押下はアプリ終了確認ダイアログを出す

Androidアプリの開発ではバックキーの挙動を意図的に変えたり

無効にしたい場面があると思いますので本稿をご覧頂き、

意図するAndroidアプリ作成のお手伝いになれば幸いです。

 

 

dispatchKeyEventを使用する方法と注意点

AndroidでdispatchKeyEventを使用するには

キーイベントをハンドリングしたいActivityやFragmentでdispatchKeyEventをオーバーライドします。

 

注意点としてはスーパークラスにイベントをreturnしないとキーイベントのハンドリングが行えないことです。

 

太字で記述してある下記コードの記述を忘れないように入力してください。

return super.dispatchKeyEvent(event);

/**
 * キーイベントの取得
 */
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    //バックキーが押されたとき
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
        if (event.getAction() == KeyEvent.ACTION_DOWN){
            //特定のレイアウトが表示されている場合の処理をここで記述
            if (mComposeMenuLayout.getVisibility() == View.VISIBLE){
            
            }
        } else if(event.getAction() == KeyEvent.ACTION_UP){
            //ボタンが離された時の処理
        }
     }
return super.dispatchKeyEvent(event);
}

dispatchKeyEventでよく使用するキーの定義一覧


Androidでよく使用するキー定義を下記に記載致しました。

特定のキーイベントをハンドリングしたい時は前述のJavaコードのKeyEvent.KEYCODE_BACKの部分を置きかえてください。

キー定義 概要
KEYCODE_APP_SWITCH アプリケーションの切り替え
KEYCODE_BACK バックキー
KEYCODE_CALL 通話キー
KEYCODE_CAMERA カメラ起動
KEYCODE_ENDCALL 終話キー
KEYCODE_ENVELOPE メール起動特殊キー
KEYCODE_EXPLORER ファイラ起動用特殊キー
KEYCODE_FOCUS カメラフォーカスキー
KEYCODE_HEADSEtdOOK ヘッドセット割込キー
KEYCODE_HOME ホームキー
KEYCODE_MENU メニューキー
KEYCODE_POWER 電源キー
KEYCODE_SEARCH 検索キー
KEYCODE_SETTINGS 設定キー
KEYCODE_SWITCH_CHARSET 文字入力モード切替
KEYCODE_VOLUME_DOWN ボリュームDOWN
KEYCODE_VOLUME_MUTE ミュート
KEYCODE_VOLUME_UP ボリュームUP

参考サイト

Android Developers keyevent