連載
» 2011年12月26日 11時41分 UPDATE

Android Tips(3):ダイアログを使用する

Androidアプリ開発者のためのTips集。Androidアプリケーションでは、AlertDialogクラスを使用することで、“ダイアログボックス”を表示できる。今回のTipsでは、基本的なダイアログ表示からOK/キャンセルダイアログの表示方法までを紹介する。

[秋本耕平(イーフロー),@IT MONOist]
Android Tips

Tips概要と動作検証環境

用途 基本
カテゴリ 画面制御
レベル 初級
動作確認環境 Android 2.3.3(GingerBread) エミュレータにて動作確認
備考 今回のTipsは上記環境で動作確認・検証を行っています


Tips 3:ダイアログを使用する

 Androidアプリケーションにも、「ダイアログボックス」が用意されている。AlertDialogクラスを使用することで、ダイアログボックスを表示することが可能だ。

基本的なダイアログボックス

 AlertDialogのインスタンスを直接作成することはできないため、AlertDialog.Builderクラスを使用して、AlertDialogを作成することになる。

AlertDialog.Builderのコンストラクタ:

    public AlertDialog.Builder Builder(Context context)


AlertDialogの作成:

    public AlertDialog.Builder setTitle (CharSequence title)
    public AlertDialog.Builder setMessage (CharSequence message)
    public AlertDialog create()


例:

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("空のダイアログ");
    builder.setMessage("Hello Android Tips");
 
    AlertDialog dialog = builder.create();
    dialog.show();


 まずは、AlertDialog.Builderを作成する。コンストラクタの第1引数Contextには、ダイアログを利用する画面のActivityを用いるのが一般的である。

 作成したAlertDialog.BuilderのsetTitle()、setMessage()メソッドでダイアログのタイトルと表示メッセージを設定して、create()メソッドでAlertDialogインスタンスを作成する。

 作成したAlertDialogのshew()メソッドを実行すると、ダイアログが表示される。

シンプルなダイアログ 画像1 シンプルなダイアログの例 ※ダイアログは、端末の[Back]キーで閉じることができる

OK/キャンセルダイアログ

 前項のダイアログはボタンのないシンプルなダイアログだったが、[OK]ボタン、[キャンセル]ボタンを持ったダイアログも作成可能である。

 AlertDialogには、肯定・否定・中立の3種類のボタンがあらかじめ用意されており、これらを任意で使用できる。

 ボタンを使用する場合、AlertDialog.Builderの以下のメソッドを使用する。

ダイアログのボタン設定:

    public AlertDialog.Builder setPositiveButton (CharSequence text, DialogInterface.OnClickListener listener) 
    public AlertDialog.Builder setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener) 
    public AlertDialog.Builder setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener) 


 第1引数にはボタンに表示するテキストを指定する。第2引数にはボタンクリック時の処理を実装したDialogInterface.OnClickListenerを指定する。

例:

    // OKダイアログ //
    public void dialog1(Context context){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("OK ダイアログ");
        builder.setMessage("Hello Android Tips");
 
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogTestActivity.this, "Click OK button", Toast.LENGTH_SHORT).show();
            }
        } );
        AlertDialog dialog = builder.create();
        dialog.show();
    }


OKダイアログ 画像2 [OK]ボタンのあるダイアログの例

 また、複数のボタンを組み合わせて使用することも可能だ。

例:

    // OK/Cancel ダイアログ //
    public void dialog2(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        String[] items = {"item 0","item 1","item 2","item 3"};
        builder.setTitle("OK/Cancel ダイアログ");
        builder.setMessage("Hello Android Tips");
        builder.setSingleChoiceItems(items, 0, mItemListener);
        builder.setPositiveButton("Yes", mButtonListener );
        builder.setNeutralButton("Cancel", mButtonListener );
        builder.setNegativeButton("No", mButtonListener );
 
        AlertDialog dialog = builder.create();
        dialog.show();
    }
 
    // ボタンのリスナー //
    DialogInterface.OnClickListener mButtonListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String btnStr = "";
            switch( which ){
            case AlertDialog.BUTTON_POSITIVE:
                btnStr = "Yes";
                break;
            case AlertDialog.BUTTON_NEUTRAL:
                btnStr = "Cancel";
                break;
            case AlertDialog.BUTTON_NEGATIVE:
                btnStr = "No";
                break;
            }
            Toast.makeText(DialogTestActivity.this, btnStr + " button clicked.", Toast.LENGTH_SHORT).show();
        }
    };


OK/Cancelダイアログ 画像3 [Yes][Cancel][No]ボタンのあるダイアログの例

Android コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


Copyright© 2017 ITmedia, Inc. All Rights Reserved.