■android.app.AlertDialog


アラートダイアログは画面の一番前に出てOKとかキャンセルとかを選択するダイアログです。
画面上にボタンを張り付けてアラートダイアログが出るプログラムを書いてみます。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        android.widget.Button button=(android.widget.Button)findViewById(R.id.button2);
        button.setOnClickListener(new button_listener());
    }
    private class button_listener implements android.view.View.OnClickListener {
        public void onClick(android.view.View view) {
            android.app.AlertDialog.Builder adb = new android.app.AlertDialog.Builder(view.getContext());
            adb.setTitle("確認");
            adb.setMessage("message");
            adb.setPositiveButton("OK", null);
            adb.show();
        }
    }
}
赤字の部分がアラートダイアログを作り出している所です。
実行してボタンを押すと次のようなダイアログが表示されます。



今回はsetPositiveButton("OK", null);の二つ目の引数がnullのため、
ダイアログのボタンを押しても何も実行されずにダイアログが閉じます。

ダイアログのボタンを押した場合の動作を書くには次のようにします。

android.app.AlertDialog.Builder adb= new android.app.AlertDialog.Builder(view.getContext());
adb.setTitle("確認");
adb.setMessage("message");
adb.setPositiveButton("OK",new android.content.DialogInterface.OnClickListener() {
    public void onClick(android.content.DialogInterface dialog, int which) {
        android.util.Log.d("test","test");
    }
});
adb.show();


■ボタンを増やす


アラートダイアログには標準で3つのボタンが付けられます。
setPositiveButton
setNeutralButton
setNegativeButton
によりボタンが設定できます。
当たり前ですが同じメソッドを2回読んでも書き換えられるだけで2個のボタンが表示されるわけではありません。

android.app.AlertDialog.Builder adb= new android.app.AlertDialog.Builder(view.getContext());
adb.setTitle("確認");
adb.setMessage("message");
adb.setPositiveButton("Positive", null);
adb.setNeutralButton("Neutral", null);
adb.setNegativeButton("Negative",null);
adb.show();

実行させると次のようになります。



意味合い的に、PositiveがOKで
NegativeがNOで
Neutralが後でとか戻るとかCANCELという意味でしょうか。



■他のコントロールを入れてみる


setViewの引数にviewを入れるとアラートダイアログに表示されます。
リニアレイアウトにトグルボタンとチェックボックスを入れてアラートダイアログに表示しています。


android.app.AlertDialog.Builder adb= new android.app.AlertDialog.Builder(view.getContext());
adb.setTitle("確認");
adb.setMessage("message");
android.widget.ToggleButton tb=new android.widget.ToggleButton(view.getContext());
android.widget.CheckBox cb=new android.widget.CheckBox(view.getContext());
cb.setText("チェックボックス");
android.widget.LinearLayout ll=new android.widget.LinearLayout(view.getContext());
ll.setOrientation(android.widget.LinearLayout.VERTICAL);
ll.addView(tb);
ll.addView(cb);
adb.setView(ll);
adb.setPositiveButton("OK", null);
adb.show();

実行すると次のようになります。



もちろん、アラートダイアログに表示されたボタンなどのイベントも通常のボタンと同じように設定できます。



■アンドロイドの戻るボタンが押された時に終了確認のダイアログを表示する


MainActivityのdispatchKeyEventメソッドをオーバーライドすることにより実現しています。
ようするにプログラムに追加するだけで動作します。

また、戻るボタンが押された後になにも処理しなければ終了しなくもできます。


@Override
public boolean dispatchKeyEvent(android.view.KeyEvent e) {
    if (e.getAction()==android.view.KeyEvent.ACTION_DOWN) {
        if(e.getKeyCode() ==android.view. KeyEvent.KEYCODE_BACK) {
            android.app.AlertDialog.Builder adb= new android.app.AlertDialog.Builder(this);
            adb.setTitle("確認");
            adb.setMessage("アプリを終了します?");
            adb.setPositiveButton("OK",new android.content.DialogInterface.OnClickListener() {
                    public void onClick(android.content.DialogInterface dialog, int which) {
                        finish();
                        moveTaskToBack(true);
                    }
            });
            adb.setNegativeButton("キャンセル",new android.content.DialogInterface.OnClickListener() {
                    public void onClick(android.content.DialogInterface dialog, int which) {
                }
            });
            adb.setCancelable(false);//キャンセルボタン以外のキャンセルを無効にする
            adb.show();
            return false;
        }
    }
    return super.dispatchKeyEvent(e);
}

上のメソッドをプログラムに追加して実行し、アンドロイドの戻るボタンを押すと次の様な画面が表示されます。
OKを押すとプログラムが終了してキャンセルを押すと復帰します。



また、setCancelable(false)によりダイアログの外をクリックされた場合でも、 ダイアログが消えないようにしています。


▲トップページ > android