概述
对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口。Dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要讲解的是AlertDialog。
什么是AlertDialog?
可以显示标题、最多三个按钮、可供选择的项目列表或自定义布局的对话框。
创建步骤
- 构建一个Builder(AlertDialog.Builder)。
- 设置对话框标题(setTitle),内容信息(setMessage)。
- 设置对话框显示的按钮,最多三个按钮(setPositiveButton,setNegativeButton)。
- 调用方法,创建对话框对象(create)。
- 显示对话框(show)。
涉及知识点
- AlertDialog.Builder 对话框构造器,可以进行对话框进行设置,并创建对话框对象。
- setTitle 设置对话框标题,setMessage设置对话框显示的文本内容
- setNegativeButton 设置对话框显示的否定按钮(Cancel), setPositiveButton设置对话框显示的肯定按钮(OK)
- show() 显示对话框
- setItems 设置对话框的列表内容
- setSingleChoiceItems 设置单选按钮的列表项,setMultiChoiceItems设置多选按钮的列表项
- setView 设置自定义视图的对话框
默认对话框
如下图所示(显示了标题,内容,两个按钮):
关键代码如下:
/**
* 默认对话框事件响应方法
*
* @param v
*/
public void showDefaultDialog(View v) {
//创建一个Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置对话框标题
builder.setTitle("提示");
//设置对话框内容
builder.setMessage("这是一个对话框的提示");
//积极按钮?
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了OK", Toast.LENGTH_SHORT).show();
}
});
//消极按钮
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了Cancel", Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}
列表对话框
如下图所示(弹出的对话框内容展示为一个列表)用户通过列表进行选择
关键代码如下:
/**
* 列表对话框响应事件
*
* @param v
*/
public void showListDialog(View v) {
//构件一个对话框Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置标题
builder.setTitle(R.string.pick_color);
//将资源文件转化为数组对象
arr_colors = getResources().getStringArray(R.array.arr_colors);
//设置列表内容和点击事件
builder.setItems(R.array.arr_colors, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}
单选按钮对话框
如下图所示(用户通过单选按钮进行选择):
关键代码如下:
/**
* 单选框对话框按钮事件
*
* @param v
*/
public void showSingleDialog(View v) {
//构件一个对话框Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置标题
builder.setTitle(R.string.pick_color);
//将资源文件转化为数组对象
arr_colors = getResources().getStringArray(R.array.arr_colors);
checkedItems=new int[arr_colors.length];
//设置列表内容和点击事件,第二个参数checkedItem表示默认选中项
builder.setSingleChoiceItems(R.array.arr_colors, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for(int i=0;i<checkedItems.length;i++){
if(i==which){
checkedItems[i]=1;
}else{
checkedItems[i]=0;
}
}
Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
}
});
//积极按钮?
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了OK"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//消极按钮
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了Cancel"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}
复选框对话框
如下图所示(对话框的内容可以进行多选):
关键代码如下:
/**
* 复选框对话框事件
*
* @param v
*/
public void showMultipleDialog(View v) {
//构件一个对话框Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置标题
builder.setTitle(R.string.pick_color);
//将资源文件转化为数组对象
arr_colors = getResources().getStringArray(R.array.arr_colors);
checkedItems=new int[arr_colors.length];
//设置列表内容和点击事件
builder.setMultiChoiceItems(R.array.arr_colors, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
String msg="";
if(isChecked){
checkedItems[which]=1;
msg="选择";
}else{
checkedItems[which]=0;
msg="取消";
}
Toast.makeText(MainActivity.this, "你"+msg+"了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
}
});
//积极按钮?
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了OK:"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//消极按钮
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了Cancel:"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}
自定义对话框
如下图所示(用户可以在弹出的对话框中输入内容等信息)
关键代码如下:
/**
* 自定义对话框事件按钮
* @param v
*/
public void showCustomerDialog(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
View customerView=inflater.inflate(R.layout.dialog_layout, null);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
mUserName= (EditText) customerView.findViewById(R.id.username);
mPassword= (EditText) customerView.findViewById(R.id.password);
builder.setView(customerView)
// Add action buttons
.setPositiveButton(R.string.sign_in, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// sign in the user ...
Toast.makeText(MainActivity.this, "你输入的用户名为:"+mUserName.getText()+"密码为:"+mPassword.getText(), Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.cancel2, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(MainActivity.this, "你取消了输入的用户名密码", Toast.LENGTH_SHORT).show(); }
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}
备注
记录学习,记录进步!