2011年6月10日金曜日

カスタムダイアログ

XMLファイルで書かれたレイアウトを、 メッセージ部分に表示してみました。

package com.alertDialogText;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

public class AlertDialogText extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  //レイアウトの呼び出し
  LayoutInflater factory = LayoutInflater.from(this);
  final View inputView = factory.inflate(R.layout.about, null);

  // ダイアログのオブジェクト(dlg) 生成
  AlertDialog.Builder dlg = new AlertDialog.Builder(this);

  // ダイアログにタイトルを指定
  dlg.setTitle("タイトル");

  // ダイアログにメッセージを指定
  dlg.setMessage("ダイアログのメッセージ");
  
  //カスタムレイアウトの表示
  dlg.setView(inputView);

  // ダイアログにアイコンを指定
  dlg.setIcon(R.drawable.icon);
  
  // アラートダイアログのポジティブボタンがクリックされた時に呼び出されるコールバックリスナーを登録します
  dlg.setPositiveButton("ポジティブ", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
   }
  });
  // アラートダイアログのニュートラルボタンがクリックされた時に呼び出されるコールバックリスナーを登録します
  dlg.setNeutralButton("ニュートラル", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
   }
  });
  // アラートダイアログのネガティブボタンがクリックされた時に呼び出されるコールバックリスナーを登録します
  dlg.setNegativeButton("ネガティブ", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
   }
  });

  // ダイアログを表示
  dlg.show();
 }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:padding="10dip"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:id="@+id/dlgLayout">
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:textSize="18.0sp"
        android:paddingBottom="5dip" android:text="XML レイアウトを読み込み" />
    <CheckBox android:text="CheckBox" android:id="@+id/checkBox1"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:gravity="center"
        android:textSize="18.0sp" android:text="メッセージ" />
    <LinearLayout android:layout_width="match_parent"
        android:id="@+id/linearLayout1" android:layout_height="wrap_content">
        <Button android:id="@+id/button1" android:text="Button"
            android:layout_height="wrap_content" android:layout_weight="1"
            android:layout_width="fill_parent"></Button>
        <Button android:id="@+id/button2" android:text="Button"
            android:layout_height="wrap_content" android:layout_weight="1"
            android:layout_width="fill_parent"></Button>
    </LinearLayout>
</LinearLayout>

関連記事

3 件のコメント:

  1. まさに同じようなカスタム・ダイアログを調べていて辿り着きました!

    ただ、カスタム・ダイアログ内に作成したボタンの動作処理を、どのように記述すればよいのかまだわかりません。

    こちらの例ですと、"@+id/button1"や"@+id/button2"が押された場合のリスナーは、どのように記述すればよいのでしょうか?

    返信削除
  2. 上の匿名様と全く同じです!
    記事の続編を期待しております。

    返信削除
    返信
    1. カスタムダイアログ2という記事で少し書いてます。
      通常のボタンが押されたときの処理と一緒でいいと思います。
      ボタンがされたら、やりたい処理を書いて、最後にダイアログを閉じるようにすればいいと思います。

      削除