AlertDialog上でBackキー、Searchキーを無効化する

ダイアログが出たときにBackキー、Searchキーが押下されることでダイアログ上のボタンが押下されることなく処理が進むことを防ぐ。
AlertDialog.Builder の setOnKeyListenerメソッドで、onKeyメソッドを実装する。Backキー、Searchキーの場合は true を返すことでキーイベントを無効化する。
サンプルコードは以下の通り。


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnKeyListener;
import android.os.Bundle;
import android.view.KeyEvent;

public class SampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Positiveボタン押下時の処理
}
});
builder.setNegativeButton("NG", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Negativeボタン押下時の処理
}
});
builder.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// Disable Back key and Search key
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
case KeyEvent.KEYCODE_SEARCH:
return true;
default:
return false;
}
}
});

AlertDialog dialog = builder.create();
dialog.show();
}
}

Backキーだけを無効化したい場合は、AlertDialog.Builder#setCancelable() を用いて


builder.setCancelable(false);
でもよい。