ホーム >  Android > ダイアログ

Android -ダイアログ-

標準ダイアログ

標準的なダイアログの表示にはAlertDialogクラスを利用します。

AlertDialogクラスの内部でBuilderクラスがあり、そのクラスの機能でダイアログを作成します。

AlertDialog.Builderクラスをインスタンス化する場合は、ダイアログを表示する画面のアクティビティを 関連づけるために、アクティビティクラスのインスタンスを引数に設定します。

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

  • AlertDialog.Builder(Context context)
  • AlertDialog.Builder(Context context, int theme)

AlertDialog.Builderクラスの主なメソッド

AlertDialog
.Builder
setTitle(CharSequence title) タイトルの指定
AlertDialog
.Builder
setMessage(CharSequence message) メッセージの指定
AlertDialog
.Builder
setIcon(int iconId) アイコンの指定
AlertDialog
.Builder
setPositiveButton(
CharSequence text,
DialogInterface.OnClickListener listener)
肯定的な意味を持つボタンを設定します。
textには、ボタンに表示する文字列を指定し、listenerには、ボタン押下時に呼び出されるコールバックを登録します。
AlertDialog
.Builder
setNegativeButton(
CharSequence text, DialogInterface.OnClickListener listener)
否定的な意味を持つボタンを設定します。
textには、ボタンに表示する文字列を指定し、listenerには、ボタン押下時に呼び出されるコールバックを登録します。
AlertDialog
.Builder
setNeutralButton(
CharSequence text, DialogInterface.OnClickListener listener)
中立的な意味を持つボタンを設定します。
textには、ボタンに表示する文字列を指定し、listenerには、ボタン押下時に呼び出されるコールバックを登録します。
AlertDialog
.Builder
setSingleChoiceItems(
CharSequence[] items, int checkedItem,
DialogInterface.OnClickListener listener)
単一選択アイテムのリスト状態を管理します。
itemsには、リストの要素を配列で指定します。
checkedItemには、選択状態にする要素を指定します。
listenerには、リストのタップ時に呼び出されるコールバックを登録します。
AlertDialog
.Builder
setMultiChoiceItems(
CharSequence[] items, boolean[] checkedItems,
DialogInterface.OnMultiChoiceClickListener listener)
複数選択アイテムのリスト状態を管理します。
itemsには、リストの要素を配列で指定します。
checkedItemsには、選択状態を配列で指定します。trueは、チェック済の状態です。
listenerには、リストのタップ時に呼び出されるコールバックを登録します。
AlertDialog
.Builder
setOnCancelListener(
DialogInterface.OnCancelListener onCancelListener)
キャンセル時に呼び出されるコールバックの登録します。
AlertDialog
.Builder
setCancelable(boolean cancelable) キャンセル可能か否かを指定します。
AlertDialog create() ダイアログの生成
AlertDialog show() ダイアログの表示

ダイアログの実行サンプル    


単一ボタンの確認ダイアログ

////////// 単一ボタンのみのダイアログ ///////////
private void showDialog1() {

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("テスト");

  // メッセージ指定
  ad.setMessage("こんにちは!");

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // 肯定的な意味を持つボタンを設定
  ad.setPositiveButton("OK"null);

  // ダイアログの表示
  ad.show();
}

Yes/Noダイアログ

////////// Yes/NOダイアログ //////////
private void showDialog2() {

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("テスト2");

  // メッセージ指定
  ad.setMessage("Yes/No ダイアログテスト");

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // 肯定的な意味を持つボタンを設定
  ad.setPositiveButton("Yes"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // PositiveButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Yesが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // 否定的な意味を持つボタンを設定
  ad.setNegativeButton("No"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // NegativeButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Noが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // ダイアログの表示
  ad.show();

}

Yes/No/Cancelのあるダイアログ

//////// Yes/No/Cancelのあるダイアログ //////////
private void showDialog3() {

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("テスト3");

  // メッセージ指定
  ad.setMessage("Yes/No/Cancelダイアログ");

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // 肯定的な意味を持つボタンを設定
  ad.setPositiveButton("Yes"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // PositiveButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Yesが押されました。",
          Toast.LENGTH_SHORT).show();

    }
  });

  // 中立的な意味を持つボタンを設定
  ad.setNeutralButton("No"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // NeutralButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Noが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // 否定的な意味を持つボタンを設定
  ad.setNegativeButton("Cancel"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // NegativeButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Cancelが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // ダイアログの表示
  ad.show();

}

リストダイアログ

////////// リストダイアログ //////////
// リストの要素指定
private String[] items = new String[] { "赤""青""黄" };

private void showDialog4() {

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("リストダイアログ");

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // リスト内のアイテムを指定
  ad.setItems(items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // リスト選択時の処理を記述します。

      // 今回はトーストを表示してみます。
      // whichでどの位置が選択されたかのインデックを取得することができます。
      Toast.makeText(P0402DialogEx1.this, items[which] + "を選択",
          Toast.LENGTH_SHORT).show();
    }
  });

  // ダイアログの表示
  ad.show();
}

ラジオボタンダイアログ

////////// ラジオボタンダイアログ //////////
// 要素の指定
private String[] items2 = new String[] { "赤""青""黄" };
// 選択状態の要素の位置
private int default_num = 0;
// 要素の値
private String result_item;

private void showDialog5() {

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("RadioButtonダイアログ");

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // 単一選択アイテムのリスト状態を管理
  ad.setSingleChoiceItems(items2, default_num,
      new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
          // タップされた位置(which)で要素の値を取得
          result_item = items2[which];
        }
      });

  // 肯定的な意味を持つボタンを設定
  ad.setPositiveButton("Yes"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // PositiveButto押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      if (result_item == null) {
        result_item = items2[default_num];
      }
      Toast.makeText(P0402DialogEx1.this, result_item + "を選択",
          Toast.LENGTH_SHORT).show();
    }
  });

  // 否定的な意味を持つボタンを設定
  ad.setNegativeButton("Cancel"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // NegativeButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Cancelが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // ダイアログの表示
  ad.show();
}

チェックボックスダイアログ

////////// チェックボックスダイアログ //////////
// リストの要素を指定
private String[] items3 = new String[] { "赤""青""黄""緑" };
// リスト要素の選択状態(チェック済か否か)を配列指定
private boolean[] flags = new boolean[] { truefalsefalsefalse };

String color = null;

private void showDialog6() {

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("CheckBoxダイアログ");

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // 複数選択アイテムのリスト状態を管理
  ad.setMultiChoiceItems(items3, flags,
      new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which,
            boolean isChecked) {
          // タップされた位置(which)のチェック状態を取得
          flags[which] = isChecked;

          Log.i("flags[which]", String.valueOf(flags[which]));
        }
      });

  // 肯定的な意味を持つボタンを設定
  ad.setPositiveButton("Yes"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // PositiveButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      color = "";
      for (int i = 0; i < items3.length; i++) {
        if (flags[i]) {
          color += (items3[i]);
        }
      }

      Toast.makeText(P0402DialogEx1.this, color + "を選択",
          Toast.LENGTH_SHORT).show();
    }
  });

  // 否定的な意味を持つボタンを設定
  ad.setNegativeButton("Cancel"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // NegativeButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Cancelが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // ダイアログの表示
  ad.show();
}

エディットテキストのダイアログ

////////// エディットテキストのダイアログ //////////
EditText editText;

private void showDialog7() {

  // EditText生成
  editText = new EditText(this);

  // AlertDialog.Builderオブジェクト生成
  AlertDialog.Builder ad = new AlertDialog.Builder(this);

  // タイトル指定
  ad.setTitle("EditTextダイアログ");

  // EditTextセット
  ad.setView(editText);

  // アイコン指定
  ad.setIcon(R.drawable.ic_launcher);

  // 肯定的な意味を持つボタンを設定
  ad.setPositiveButton("OK"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // PositiveButton押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this,
          editText.getText().toString(), Toast.LENGTH_SHORT)
          .show();
    }
  });

  // 否定的な意味を持つボタンを設定
  ad.setNegativeButton("Cancel"new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

      // NegativeButto押下時の処理を記述します。

      // 今回はトーストを表示してみます。
      Toast.makeText(P0402DialogEx1.this"Cancelが押されました。",
          Toast.LENGTH_SHORT).show();
    }
  });

  // ダイアログの表示
  ad.show();
}

プログレスのダイアログ

////////// プログレスのダイアログ //////////
ProgressDialog pd;

private void showDialog8() {

  // ProgressDialog.Builderオブジェクト生成
  pd = new ProgressDialog(this);

  // タイトル指定
  pd.setTitle("Progressダイアログ");

  // メッセージ指定
  pd.setMessage("しばらくお待ちください");

  // アイコン指定
  pd.setIcon(R.drawable.ic_launcher);

  // 進捗率を表示するか否か
  // 「false」にすると進捗率を監視し、表示することが可能になる。
  // 進捗を予測できない場合は、「true」にする。
  pd.setIndeterminate(false);

  // プログレスバーの表示形式の設定
  pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

  // 表示する分母となる数値の設定
  pd.setMax(100);

  // ProgressDialogを表示中にキャンセル可能か否か
  pd.setCancelable(false);

  // ProgressDialogのキャンセル時によびだされるコールバックの登録
  pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {

    }
  });

  // ダイアログの表示
  pd.show();

  // 進捗率を更新するThread
  new Thread(new Runnable() {
    @Override
    public void run() {
      try {
        for (int i = 0; i < pd.getMax(); i++) {
          // 進捗率を1ずつ更新
          pd.setProgress(i);
          Thread.sleep(100);
        }
      } catch (InterruptedException e) {
        Log.e("ProgressDialog", e.toString());
      }
      // 進捗率100%でダイアログをクローズ
      pd.dismiss();
    }
  }).start();
}