goo blog サービス終了のお知らせ 

marunomaruno-memo

marunomaruno-memo

Android ダイアログ (1) 基本的な AlertDialog

2011年07月06日 | Android
                                                                2012-02-07 更新
                                                                2011-07-06 新規
ダイアログ (1) 基本的な AlertDialog
================================================================================

■ ダイアログの種類

android.app パッケージにダイアログがある。

Dialog                          ダイアログの基底となるクラス
    +- AlertDialog              アラート・ダイアログ
           +- DatePickerDialog  日付選択ダイアログ
           +- ProgressDialog    処理待ちダイアログ
           +- TimePickerDialog  時刻選択ダイアログ
    +- CharacterPickerDialog    文字選択ダイアログ

今回は、AlertDialog について記述する。


■ AlertDialog(アラート・ダイアログ)

ユーザーにメッセージを出す。

メッセージのみや、ボタンを表示して、ユーザーの選択を待つこともできる。
また、指定によって、リストの選択、ラジオボタン、チェックボックスもできるし、
また、テキストを入力させるなど、カスタマイズしたダイアログを出すことができる。

今回は、AlertDialog の中でも基本的なメッセージのみと、ボタンによる選択について記
述する。


■ メッセージのみを表示するダイアログ

戻るボタンでダイアログを終了する。

下のサンプルは、2つのダイアログを表示する。ただし、順番どおりに表示しているが、
重なって表示されているようなので、最後に出力したものから順番に表示されているよう
に見える。

□ Dialog01Activity.java
---
package jp.marunomaruno.android.sample;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;

public class Dialog01Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        AlertDialog.Builder dialog;                          // (1)
        dialog = new AlertDialog.Builder(this);              // (2)
        dialog.setTitle("2番目のダイアログのタイトル");      // (3)
        dialog.setMessage("次のダイアログです。");           // (4)
        dialog.show();                                       // (5)

        new AlertDialog.Builder(this)                        // (6)
                .setIcon(R.drawable.icon)                    // (7)
                .setTitle("最初ののダイアログのタイトル")
                .setMessage("戻るボタンで次のダイアログを表示します。")
                .show();
    }
}
---

(1) AlertDialogクラスの内部クラスBuilderの型として作る
(2) AlertDialog.Builderオブジェクトをこのアクティビティを基に作る

コンストラクター
    AlertDialog.Builder(Context context)
    AlertDialog.Builder(Context context, int theme)

(3) ダイアログのタイトルを設定する

    AlertDialog.Builder setTitle(CharSequence title)
    AlertDialog.Builder setTitle(int titleId)

(4) ダイアログに表示するメッセージを設定する

    AlertDialog.Builder  setMessage(CharSequence message)
    AlertDialog.Builder  setMessage(int messageId)


(5) メッセージを表示する

     AlertDialog show()


(6) AlertDialog.Builderオブジェクトのそれぞれのメソッドは、AlertDialog.Builder型
の戻り値を持っているので、上記のようなメソッド・チェーンを使って、簡潔に表記でき
る。


(7) ダイアログのアイコンを設定する

    AlertDialog.Builder setIcon(Drawable icon)
    AlertDialog.Builder setIcon(int iconId)

たとえば、res/drawable-Xdpi/icon.png を使うのであれば、次のようにする
        .setIcon(R.drawable.icon)



■ ボタン付きのダイアログ

同じAlertDialogを使う。
このとき、3つのボタンを設定できる。それぞれ、左からつぎのメソッドで指定する
    setPositiveButton()   肯定的なイメージで使うボタン(OK、Yes)
    setNeutralButton()    否定的なイメージで使うボタン(No)
    setNegativeButton()   否定的なイメージで使うボタン(No、Cancel)

引数はいずれも同じ形式なので、ここでは     setPositiveButton() で説明する。

    AlertDialog.Builder setPositiveButton(int textId, 
                                    DialogInterface.OnClickListener listener)
    AlertDialog.Builder setPositiveButton(CharSequence text, 
                                    DialogInterface.OnClickListener listener)

下のサンプルは、ボタンつきのダイアログを表示する。メッセージは、画面上部に、クリ
ックしたボタンの種類を表示する。
プログラムの流れは、「Yes/No/Cancel」 -> 「Yes/No」 -> 「OK」 -> 「OK」だが、実
際に表示される順番はこの逆になる。


□ Dialog02Activity
---
package jp.marunomaruno.android.sample;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.widget.Toast;

public class Dialog02Activity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 4. Yes/No/Cancel でアクション
        new AlertDialog.Builder(this)
                .setTitle("ボタンつきのダイアログのタイトル")
                .setMessage("Yes/No/Cancel ボタンでメッセージを出します。")
                .setPositiveButton("Yes", new ButtonHandler("Yes"))       // (1)
                .setNeutralButton("No", new ButtonHandler("No"))          // (2)
                .setNegativeButton("Cancel", new ButtonHandler("Cancel")) // (3)
                .show();

        // 3. Yes/No でアクション
        new AlertDialog.Builder(this)
                .setTitle("ボタンつきのダイアログのタイトル")
                .setMessage("Yes/No ボタンでメッセージを出します。")
                .setPositiveButton("Yes", new ButtonHandler("Yes"))
                .setNegativeButton("No", new ButtonHandler("No"))
                .show();

        // 2. OK でアクション
        new AlertDialog.Builder(this)
                .setTitle("ボタンつきのダイアログのタイトル")
                .setMessage("OKボタンでメッセージを出します。")
                .setPositiveButton("OK", new ButtonHandler("OK"))
                .show();

        // 1. OK
        new AlertDialog.Builder(this)
                .setTitle("ボタンつきのダイアログのタイトル")
                .setMessage("OKボタンで次に行きます。")
                .setPositiveButton("OK", null)                            // (4)
                .show();
    }

    private class ButtonHandler implements OnClickListener {              // (5)
        private String button;
        
        public ButtonHandler(String button) {
            this.button = button;
        }

        @Override
        public void onClick(DialogInterface dialog, int which) {          // (6)
            Toast.makeText(Dialog02Activity.this,
                    String.format("%s ボタンが押されました。(%d)", button, which),
                    Toast.LENGTH_SHORT).show();
        }
    }
}
---

(1)(2)(3)

それぞれのボタンを設定する。
第1引数は、ボタンに表示する文字列または文字列のリソースID。
第2引数は、OnClickListenerインターフェースを実装しているオブジェクト。

(4) ボタンに対してリスナー・オブジェクトを設定しないときは null を指定する

(5) OnClickListenerを実装したクラス

onClick() メソッドを実装する必要がある。


(6) 実装メソッド

    abstract void onClick(DialogInterface dialog, int which)
    
which で、つぎのどのメソッドで指定したかがわかる。これは、DialogInterfaceイン
ターフェースに定数で用意してある。

         定数            値     設定メソッド
    ------------------- ---- ---------------------
    int BUTTON_NEGATIVE  -2   setNegativeButton()
    int BUTTON_NEUTRAL   -3   setNeutralButton()
    int BUTTON_POSITIVE  -1   setPositiveButton()



最新の画像もっと見る

コメントを投稿