概述
对话框(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 设置自定义视图的对话框
默认对话框
如下图所示(显示了标题,内容,两个按钮):
关键代码如下:
1 /** 2 * 默认对话框事件响应方法 3 * 4 * @param v 5 */ 6 public void showDefaultDialog(View v) { 7 //创建一个Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //设置对话框标题 10 builder.setTitle("提示"); 11 //设置对话框内容 12 builder.setMessage("这是一个对话框的提示"); 13 //积极按钮? 14 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 15 @Override 16 public void onClick(DialogInterface dialog, int which) { 17 Toast.makeText(MainActivity.this, "你选择了OK", Toast.LENGTH_SHORT).show(); 18 } 19 }); 20 //消极按钮 21 builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 22 @Override 23 public void onClick(DialogInterface dialog, int which) { 24 Toast.makeText(MainActivity.this, "你选择了Cancel", Toast.LENGTH_SHORT).show(); 25 } 26 }); 27 //创建一个对话框 28 AlertDialog dialog = builder.create(); 29 //显示一个对话框 30 dialog.show(); 31 }
列表对话框
如下图所示(弹出的对话框内容展示为一个列表)用户通过列表进行选择
关键代码如下:
1 /** 2 * 列表对话框响应事件 3 * 4 * @param v 5 */ 6 public void showListDialog(View v) { 7 //构件一个对话框Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //设置标题 10 builder.setTitle(R.string.pick_color); 11 //将资源文件转化为数组对象 12 arr_colors = getResources().getStringArray(R.array.arr_colors); 13 //设置列表内容和点击事件 14 builder.setItems(R.array.arr_colors, new DialogInterface.OnClickListener() { 15 @Override 16 public void onClick(DialogInterface dialog, int which) { 17 Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show(); 18 } 19 }); 20 //创建一个对话框 21 AlertDialog dialog = builder.create(); 22 //显示一个对话框 23 dialog.show(); 24 }
单选按钮对话框
如下图所示(用户通过单选按钮进行选择):
关键代码如下:
1 /** 2 * 单选框对话框按钮事件 3 * 4 * @param v 5 */ 6 public void showSingleDialog(View v) { 7 //构件一个对话框Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //设置标题 10 builder.setTitle(R.string.pick_color); 11 //将资源文件转化为数组对象 12 arr_colors = getResources().getStringArray(R.array.arr_colors); 13 checkedItems=new int[arr_colors.length]; 14 //设置列表内容和点击事件,第二个参数checkedItem表示默认选中项 15 builder.setSingleChoiceItems(R.array.arr_colors, 0, new DialogInterface.OnClickListener() { 16 @Override 17 public void onClick(DialogInterface dialog, int which) { 18 for(int i=0;i<checkedItems.length;i++){ 19 if(i==which){ 20 checkedItems[i]=1; 21 }else{ 22 checkedItems[i]=0; 23 } 24 } 25 Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show(); 26 } 27 }); 28 //积极按钮? 29 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 30 @Override 31 public void onClick(DialogInterface dialog, int which) { 32 Toast.makeText(MainActivity.this, "你选择了OK"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 33 } 34 }); 35 //消极按钮 36 builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 37 @Override 38 public void onClick(DialogInterface dialog, int which) { 39 Toast.makeText(MainActivity.this, "你选择了Cancel"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 40 } 41 }); 42 //创建一个对话框 43 AlertDialog dialog = builder.create(); 44 //显示一个对话框 45 dialog.show(); 46 }
复选框对话框
如下图所示(对话框的内容可以进行多选):
关键代码如下:
1 /** 2 * 复选框对话框事件 3 * 4 * @param v 5 */ 6 public void showMultipleDialog(View v) { 7 //构件一个对话框Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //设置标题 10 builder.setTitle(R.string.pick_color); 11 //将资源文件转化为数组对象 12 arr_colors = getResources().getStringArray(R.array.arr_colors); 13 checkedItems=new int[arr_colors.length]; 14 //设置列表内容和点击事件 15 builder.setMultiChoiceItems(R.array.arr_colors, null, new DialogInterface.OnMultiChoiceClickListener() { 16 @Override 17 public void onClick(DialogInterface dialog, int which, boolean isChecked) { 18 String msg=""; 19 if(isChecked){ 20 checkedItems[which]=1; 21 msg="选择"; 22 }else{ 23 checkedItems[which]=0; 24 msg="取消"; 25 } 26 Toast.makeText(MainActivity.this, "你"+msg+"了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show(); 27 } 28 }); 29 //积极按钮? 30 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 31 @Override 32 public void onClick(DialogInterface dialog, int which) { 33 Toast.makeText(MainActivity.this, "你选择了OK:"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 34 } 35 }); 36 //消极按钮 37 builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 38 @Override 39 public void onClick(DialogInterface dialog, int which) { 40 Toast.makeText(MainActivity.this, "你选择了Cancel:"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 41 } 42 }); 43 //创建一个对话框 44 AlertDialog dialog = builder.create(); 45 //显示一个对话框 46 dialog.show(); 47 }
自定义对话框
如下图所示(用户可以在弹出的对话框中输入内容等信息)
关键代码如下:
1 /** 2 * 自定义对话框事件按钮 3 * @param v 4 */ 5 public void showCustomerDialog(View v) { 6 7 AlertDialog.Builder builder = new AlertDialog.Builder(this); 8 // Get the layout inflater 9 LayoutInflater inflater = getLayoutInflater(); 10 View customerView=inflater.inflate(R.layout.dialog_layout, null); 11 // Inflate and set the layout for the dialog 12 // Pass null as the parent view because its going in the dialog layout 13 mUserName= (EditText) customerView.findViewById(R.id.username); 14 mPassword= (EditText) customerView.findViewById(R.id.password); 15 builder.setView(customerView) 16 // Add action buttons 17 .setPositiveButton(R.string.sign_in, new DialogInterface.OnClickListener() { 18 @Override 19 public void onClick(DialogInterface dialog, int id) { 20 // sign in the user ... 21 Toast.makeText(MainActivity.this, "你输入的用户名为:"+mUserName.getText()+"密码为:"+mPassword.getText(), Toast.LENGTH_SHORT).show(); 22 } 23 }) 24 .setNegativeButton(R.string.cancel2, new DialogInterface.OnClickListener() { 25 public void onClick(DialogInterface dialog, int id) { 26 Toast.makeText(MainActivity.this, "你取消了输入的用户名密码", Toast.LENGTH_SHORT).show(); 27 28 } 29 }); 30 //创建一个对话框 31 AlertDialog dialog = builder.create(); 32 //显示一个对话框 33 dialog.show(); 34 }
备注
记录学习,记录进步!