要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。
使用AlertDialog.Builder创建对话框需要了解以下几个方法:
setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setView : 给对话框设置自定义样式
setItems :设置对话框要显示的一个list,一般用于显示几个命令时
setMultiChoiceItems :用来设置对话框显示一系列的复选框
setNeutralButton :普通按钮
setNegativeButton :对话框添加"No"按钮
create : 创建对话框
show :显示对话框
一、简单的Dialog
AlertDialog.Builder builder = new Builder(DialogActivity.this);
//设置标题
builder.setTitle("提示!");
//设置提示信息
builder.setMessage("是否退出应用程序?");
//设置确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//关闭dialog
dialog.dismiss();
//关闭应用程序
DialogActivity.this.finish();
}
});
//设置取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
builder.create().show();
也可以多添加一个中立的按钮
//添加中立按钮
builder.setNeutralButton("等等看", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, "稍等一会", Toast.LENGTH_LONG);
}
});
效果图:
二、类似ListView的列表框Dialog
用setItems(CharSequence[] items, final OnClickListener listener)方法来实现类似ListView的AlertDialog
第一个参数是要显示的数据的数组,第二个参数是点击某个item的触发事件
Dialog dialog = new AlertDialog.Builder(DialogActivity.this).
setTitle("你喜欢的运动").setItems(palyArr, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, palyArr[which], Toast.LENGTH_LONG).show();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).create();
dialog.show();
效果图:
三、类似RadioButton的选择Dialog
用setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)方法来实现类似RadioButton的AlertDialog
第一个参数是要显示的数据的数组,第二个参数是初始值(初始被选中的item),第三个参数是点击某个item的触发事件
radioBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final String[] palyArr = new String[]{"音乐","游戏","运动","呆着"};
Dialog dialog = new AlertDialog.Builder(DialogActivity.this).
setTitle("你喜欢的运动").setSingleChoiceItems(palyArr, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
selectIndex = which;
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(DialogActivity.this, palyArr[selectIndex], Toast.LENGTH_LONG).show();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).create();
dialog.show();
}
});
效果图:
四、类似checkBox的多选Dialog
第一个参数是要显示的数据的数组,第二个参数是选中状态的数组,第三个参数是点击某个item的触发事件
checkBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final String[] palyArr = new String[]{"音乐","游戏","运动","呆着"};
final boolean[] palySelectedArr = new boolean[]{true,false,true,false};
Dialog dialog = new AlertDialog.Builder(DialogActivity.this).
setTitle("你喜欢那些活动").
setMultiChoiceItems(palyArr, palySelectedArr, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
palySelectedArr[which] = isChecked;
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
StringBuilder selectStr = new StringBuilder();
for (int i = 0; i < palyArr.length; i++) {
if (palySelectedArr[i] == true)
{
selectStr.append(palyArr[i] + "、");
}
}
Toast.makeText(DialogActivity.this, selectStr.toString(), Toast.LENGTH_LONG).show();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).create();
dialog.show();
}
});
效果图:
五、自定义view的Dialog
有时候我们不能满足系统自带的AlertDialog风格,就比如说我们要实现一个Login画面,有用户名和密码,这时我们就要用到自定义View的AlertDialog
loginBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//先获取自定义的view
LayoutInflater layoutInflater = LayoutInflater.from(DialogActivity.this);
View loginView = layoutInflater.inflate(R.layout.login, null);
Dialog dialog = new AlertDialog.Builder(DialogActivity.this).
setTitle("用户登录").setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).setView(loginView).create();
dialog.show();
}
});
效果图: