サイト移転のお知らせ:http://techbooster.org/に移転しました

戻るキー(Backキー)を無効にする

3月 31, 2011   //   by kkato   //   ユーザインターフェース  //  1 Comment

今回は特定のキーを無効にする方法を説明します。

実際のアプリケーション開発においては、「戻る(Back)キーを無効にしたい」という場面が出てくると思います。

Androidの標準の動きとしては戻るキーを押すと現在のActivityが終了します。

しかし、戻るキーを押された時にすぐにActivityを終了させずにデータ保存の有無に関する確認ダイアログを出したい場面や、ゲームであればゲーム中に誤ってキーを押してゲームが中断することを防ぐために完全にハードウェアキーを無効にした方がよいこともあります。

以前、キーイベントを取得するで紹介したサンプルコードを少し修正するだけで実現可能です。
それでは続きでサンプルコードを説明します。

dispatchKeyEvent

Activity#dispatchKeyEvent()でイベントのハンドリングを行います。
まずはキーイベントを取得するのサンプルコードを再度掲載します。

@Override
public boolean dispatchKeyEvent(KeyEvent e) {
    // キーコード表示
    tv01.setText("KeyCode:"+e.getKeyCode());

    // 戻るボタンが押されたとき
    if(e.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        // ボタンが押されたとき
        if (e.getAction() == KeyEvent.ACTION_DOWN) {
            tv01.setBackgroundColor(Color.RED); // TextViewの背景色をREDにする
        }
        // ボタンが離されたとき
        else if (e.getAction() == KeyEvent.ACTION_UP) {
            tv01.setBackgroundColor(Color.BLUE); // TextViewの背景色をBLUEにする
        }
    }
    return super.dispatchKeyEvent(e);
}

このコードでは戻るキーを押してTextViewの背景色を変更していますが、Androidのデフォルトの処理も走るのでActivityが終了してしまいます。

次に戻るキーを無効にするサンプルコードを示します。

Activityを終了せずに何もしないようにするには親クラスのdispatchKeyEvent()を呼び出さずにtrueを返すようにします。

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getAction()==KeyEvent.ACTION_DOWN) {
    	switch (event.getKeyCode()) {
    	case KeyEvent.KEYCODE_BACK:
    		// ダイアログ表示など特定の処理を行いたい場合はここに記述
    		// 親クラスのdispatchKeyEvent()を呼び出さずにtrueを返す
    		return true;
    	}
    }
    return super.dispatchKeyEvent(event);
}

これで戻るキー(Backキー)を押してもActivityが終了しないようになります。

※Androidのデフォルトの動作とは異なることになるので実際にこのように無効にするかどうかの判断は、しっかりと検討してから行うべきです。ユーザーとしてはアプリによってボタンの挙動が変わることはあまり好ましくありません。

※ホームボタンをdispatchKeyEventでフックすることはできません。

関連する記事:

Sponsored Link

1 Comment

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です