目录
- AlertDialog对话框
- 普通对话框
- 单选框
- 多选框
- 自定义框
AlertDialog对话框
部分节选自博主编《Android应用开发项目式教程》(机械工业出版社)2024.6
在Android中,AlertDialog弹出对话框用于显示一些重要信息或者需要用户交互的内容。
弹出对话框一般以小窗口的形式展示在界面上,如图所示。
弹出对话框一般可以分为三个部分:标题区、内容区、按钮区,其中内容区可以有多种样式,可以是普通的文本、单选框、多选框、输入框、自定义布局等。
一般情况下,创建AlertDialog对话框的步骤大致分为以下几步:
1)创建AlertDialog.Builder的对象;
2)设置AlertDialog对话框的标题名称和图标。
3)设置对话框内容,调用AlertDialog.Builder的setMessage()、setView()、setSingleChoiceItems()、setMultiChoiceItems()方法设置AlertDialog对话框的内容为简单文本、自定义、单选列表或多选列表。
4)调用AlertDialog.Builder的setPositiveButton()和setNegativeButton()方法设置AlertDialog对话框的确定和取消按钮。
5)调用AlertDialog.Builder的create()方法创建AlertDialog对象。
6)调用AlertDialog对象的show()方法显示该对话框。
普通对话框
创建普通对话框的示例代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("普通对话框");
builder.setMessage("这是内容");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "确定被点击了", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
单选框
创建其他AlertDialog的代码类似,区别在于普通对话框内容部分是设置消息setMessage(),单选框是setSingleChoiceItems(),多选框是setMultiChoiceItems(),自定义框是setView()。单选框需要在选项被勾选时记录被勾选的选项,并在确定被单击时获取该选项值,单选框的关键示例代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("单选对话框");
builder.setSingleChoiceItems(singleItemStr, singleCheckedItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
singleCheckedItem = which;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, singleItemStr[singleCheckedItem] + "确定被点击了", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
多选框
多选框与单选框类似,也需要在选项被勾选时记录被勾选的选项,并在确定时获取被勾选的选项值,不同的是由于多选框可以多个选项被选中,因此需要用一个数组记录选项是否被勾选。多选框的关键示例代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("多选对话框");
builder.setMultiChoiceItems(multiItemStr, multiCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
multiCheckedItems[which] = isChecked;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < multiCheckedItems.length; i++) {
if (multiCheckedItems[i]) {
stringBuffer.append(multiItemStr[i]).append(" ");
}
}
Toast.makeText(MainActivity.this, stringBuffer.toString() + "被选中了", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
自定义框
自定义弹出对话框需要自定义对话框内容的布局,并实现相关逻辑。
以下是一个自定义对话框关键代码的示例,
该自定义对话框较为简单,只有一个输入框:
LayoutInflater inflater = getLayoutInflater();
View definedView = inflater.inflate(R.layout.self_defined, null, false);
buttonDefine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle("自定义对话框");
builder.setView(definedView);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText editText = definedView.findViewById(R.id.editTextText);
String str = editText.getText().toString().trim();
Toast.makeText(MainActivity.this, "输入密码是:" + str, Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
});
完整代码请查看gitee:source/v1.0/Project3Views/AlertDialogTest
Gitee