基本的な使い方
タイトルとメッセージを表示するだけの基本的なAlertDialogです。
「戻る」ボタンで元の画面に戻ります。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setMessage("Message");
alert.show();
}
}
OKダイアログ
次にOKボタンを表示し、ダイアログを閉じられるようにします。
OKボタンをクリックしたときに画面を閉じるだけの場合、setPositiveButton()メソッドの第2引数をnullにします。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setMessage("Message");
alert.setPositiveButton("OK", null);
alert.show();
}
}
Yes/Noダイアログ
Yesボタンを押したときの処理はsetPositiveButton()メソッドの第2引数にDialogInterface.OnClickListenerを設定して、処理を記述します。
Noボタンを押したときの処理はsetNegativeButton()メソッドの第2引数にDialogInterface.OnClickListenerを設定して、処理を記述します。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setMessage("Message");
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
//Yesボタンが押された時の処理
Toast.makeText(MainActivity.this, "Yes Clicked!", Toast.LENGTH_LONG).show();
}});
alert.setNegativeButton("No", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
//Noボタンが押された時の処理
Toast.makeText(MainActivity.this, "No Clicked!", Toast.LENGTH_LONG).show();
}});
alert.show();
}
}
Yes/No/Cancelダイアログ
先ほどのYes/Noダイアログでは、setNegativeButton()メソッドにNoボタンを設定しましたが、
Yesボタン、Noボタン、Cancelボタンの順にボタンを配置したい場合は、
YesボタンはsetPositiveButton()、NoボタンはsetNeutralButton()、CancelボタンはsetNegativeButton()に処理を記述します。
setPositiveButton()メソッドで設定したボタンは一番左、setNeutralButton()メソッドで設定したボタンは中央、setNegativeButton()メソッドで設定したボタンは一番右に配置されます。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setMessage("Message");
alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
//Yesボタンが押された時の処理
Toast.makeText(MainActivity.this, "Yes Clicked!", Toast.LENGTH_LONG).show();
}});
alert.setNeutralButton("No", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
//Noボタンが押された時の処理
Toast.makeText(MainActivity.this, "No Clicked!", Toast.LENGTH_LONG).show();
}});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
//Cancelボタンが押された時の処理
Toast.makeText(MainActivity.this, "Cancel Clicked!", Toast.LENGTH_LONG).show();
}});
alert.show();
}
}
ダイアログにリストを表示する
setItems()メソッドを使って、ダイアログにリストを表示させる事ができます。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String[] items = {"item1","item2","item3"};
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setItems(items, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int idx) {
// リストアイテムを選択したときの処理
Toast.makeText(MainActivity.this, String.format("%s Selected", items[idx]), Toast.LENGTH_LONG).show();
}});
alert.show();
}
}
ダイアログにラジオボタン付きのリストを表示する
setSingleChoiceItems()メソッドを使って、ダイアログにラジオボタン付きのリストを表示できます。
setSingleChoiceItems()メソッドの第1引数にはリストに表示する項目の配列、第2引数には選択するラジオボタンの初期値を指定します。初期値に-1を選択すると何も選択されません。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
private int mCheckedItem = -1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String[] items = {"item1","item2","item3"};
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setSingleChoiceItems(items,mCheckedItem,new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, String.format("%s Selected", items[which]), Toast.LENGTH_LONG).show();
mCheckedItem = which;
}});
alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, String.format("%s Selected", items[mCheckedItem]), Toast.LENGTH_LONG).show();
}});
alert.show();
}
}
ダイアログにチェックボックス付きのリストを表示する
setMultiChoiceItems()メソッドを使って、複数選択できるチェックボックス付きのリストを表示することができます。
setMultiChoiceItems()メソッドの第1引数にはリストに表示する項目の配列、第2引数には選択するチェックボックスの初期値を論理値配列で指定します。
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
private boolean[] mCheckedItems = {true,false,true};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String[] items = {"item1","item2","item3"};
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
alert.setMultiChoiceItems(items, mCheckedItems, new DialogInterface.OnMultiChoiceClickListener(){
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
mCheckedItems[which] = isChecked;
}});
alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int idx) {
String str = null;
for (int i = 0; i < mCheckedItems.length; i++){
if (mCheckedItems[i] == true){
str += items[i];
}
}
if (str == null){
str = "No Selected";
}
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
}});
alert.show();
}
}
独自のレイアウトを表示する
AlertDialogに独自のレイアウトを表示することもできます。
まずAlertDialogに表示するレイアウトを作成します。
EditTextを1つ配置したレイアウトを作成しました。
res/layout/alert.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
</EditText>
</LinearLayout>
LayoutInflaterクラスを使用して、レイアウトからViewを作成し、AlertDialog#setView()メソッドでViewを設定します。
MainActivity.java
package my.study.android;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Title");
//LayoutInflaterクラスを使用して、レイアウトからViewを作成します。
LayoutInflater inflater = LayoutInflater.from(this);
final View viw = inflater.inflate(R.layout.alert,null);
//AlertDialogにビューを設定します。
alert.setView(viw);
alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int idx) {
EditText txt = (EditText)viw.findViewById(R.id.EditText01);
Toast.makeText(MainActivity.this,txt.getText(),Toast.LENGTH_LONG).show();
}});
alert.show();
}
}