Androidダイアログ(Dialog)大全の詳細とコード例


Activitiesは、onCreateDialog(int)、onPrepareDialog(int、Dialog)、showDialog(int)、disDialog(int)などの管理を容易にするためのダイアログ機構を提供しています。これらの方法を使用すると、ActivityはgetOwner Activyによって管理されます。
onCreateDialog(int):このコールバック関数を使うと、Androidシステムは、このActivityを各ダイアログの所有者として有効に設定し、各ダイアログの状態を自動的に管理し、Activityに接続します。このように、各ダイアログはこのActivityの特定の属性を継承します。例えば、一つのダイアログが開くと、メニューキーはこのActivityで定義されているオプションメニューとして表示され、音量キーはActivityで使用されているオーディオストリームを変更します。
showDialog(int):ダイアログを表示したい場合は、showDialog(int id id)メソッドを呼び出し、このダイアログを一意に識別する整数を伝えます。ダイアログが最初に要求されたとき、AndroidはあなたのActivityからオンクリティングディレクトを呼び出します。ここでこのダイアログDialogを初期化します。このフィードバック方法は、show Dialogと同じIDで伝えられている。このダイアログを作成すると、Activityの最後にこのオブジェクトを返します。
OPropareDialog:ダイアログが表示される前に、Androidはオプションのコールバック関数onPropareDialogを呼び出しました。この方法を定義することができます。この方法は、ダイアログを開くたびに呼び出しられますが、OneCreateDialog(int)は、ダイアログが初めて開いたときにのみ呼び出しられます。もしあなたがonPrepareDialogを定義しないなら、このダイアログは前回開いた時と同じです。この方法は、ダイアログのIDと、オンクリアーDialog()で作成されたダイアログオブジェクトにも渡される。
dismisDialog(int):ダイアログを閉じる準備ができたら、このダイアログにdismis()を呼び出して消すことができます。必要であれば、このActivityからdismisDialog(int id)メソッドを呼び出すこともできます。これは実際にこのダイアログに対してdismis()メソッドを呼び出します。あなたがonCreateDialog(int id)を使用してダイアログの状態を管理したいなら(前のチャプターで議論したように)そしてダイアログが消えるたびに、このダイアログオブジェクトの状態はActivityによって保存されます。このオブジェクトを必要としないことを決定するか、またはこの状態をクリアすることが重要であれば、removeDialog(int id id)を呼び出すべきです。これは、内部オブジェクト参照を削除します。このダイアログが表示されている場合は、削除されます。
以下はいくつかのダイアログの効果です。

図1

図2

図3

図4

図5

図6

図7
図1の効果:戻りボタンを押すと、エラーなく操作できるようにするためのヒントが表示され、よくあるダイアログスタイルが採用されます。
コード:
ダイアログの作成方法dialog()

protected void dialog() {
 AlertDialog.Builder builder = new Builder(Main.this);
 builder.setMessage("     ?");

 builder.setTitle("  ");

 builder.setPositiveButton("  ", new OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
  dialog.dismiss();

  Main.this.finish();
  }
 });

 builder.setNegativeButton("  ", new OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
  dialog.dismiss();
  }
 });

 builder.create().show();
 }

 

 onKeyDown(int keyCode, KeyEvent event)        

public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
  dialog();
 }
 return false;
 }

図2の効果:ダイアログのグラフを変えて、3つのボタンを追加しました。

Dialog dialog = new AlertDialog.Builder(this).setIcon(
   android.R.drawable.btn_star).setTitle("    ").setMessage(
   "          ?").setPositiveButton("   ",
   new OnClickListener() {

   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    Toast.makeText(Main.this, "        。",
     Toast.LENGTH_LONG).show();
   }
   }).setNegativeButton("   ", new OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   Toast.makeText(Main.this, "        。", Toast.LENGTH_LONG)
    .show();
  }
  }).setNeutralButton("  ", new OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   Toast.makeText(Main.this, "        。", Toast.LENGTH_LONG)
    .show();
  }
  }).create();

  dialog.show();

図3の効果:情報の内容は簡単なViewタイプです。

new AlertDialog.Builder(this).setTitle("   ").setIcon(
   android.R.drawable.ic_dialog_info).setView(
   new EditText(this)).setPositiveButton("  ", null)
   .setNegativeButton("  ", null).show();

 

図4の効果:情報の内容は単一選択ボックスのセットです。

new AlertDialog.Builder(this).setTitle("   ").setMultiChoiceItems(
   new String[] { "Item1", "Item2" }, null, null)
   .setPositiveButton("  ", null)
   .setNegativeButton("  ", null).show();

 

図5の効果:情報の内容は多選択枠のセットです。

new AlertDialog.Builder(this).setTitle("   ").setIcon(
   android.R.drawable.ic_dialog_info).setSingleChoiceItems(
   new String[] { "Item1", "Item2" }, 0,
   new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
   }
   }).setNegativeButton("  ", null).show();

 

図6の効果:情報の内容は簡単なリスト項目のセットです。

new AlertDialog.Builder(this).setTitle("   ").setItems(
   new String[] { "Item1", "Item2" }, null).setNegativeButton(
   "  ", null).show();

 

図7の効果:情報の内容はカスタムレイアウトです。
1.レイアウトファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="wrap_content" android:layout_width="wrap_content"
 android:background="#ffffffff" android:orientation="horizontal"
 android:id="@+id/dialog">
 <TextView android:layout_height="wrap_content"
  android:layout_width="wrap_content"
 android:id="@+id/tvname" android:text="  :" />
 <EditText android:layout_height="wrap_content"
 android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/>

</LinearLayout>

2.コールコード

LayoutInflater inflater = getLayoutInflater();
  View layout = inflater.inflate(R.layout.dialog,
   (ViewGroup) findViewById(R.id.dialog));

  new AlertDialog.Builder(this).setTitle("     ").setView(layout)
   .setPositiveButton("  ", null)
   .setNegativeButton("  ", null).show();

 以上はAndroidダイアログのいくつかの実現方法を整理しました。引き続き関連資料を補充します。ありがとうございます。