一起学Android之Dialog

时间:2021-10-15 22:37:23

概述

对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口。Dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要讲解的是AlertDialog。

什么是AlertDialog?

可以显示标题、最多三个按钮、可供选择的项目列表或自定义布局的对话框。

创建步骤

  1. 构建一个Builder(AlertDialog.Builder)。
  2. 设置对话框标题(setTitle),内容信息(setMessage)。
  3. 设置对话框显示的按钮,最多三个按钮(setPositiveButton,setNegativeButton)。
  4. 调用方法,创建对话框对象(create)。
  5. 显示对话框(show)。

涉及知识点

  • AlertDialog.Builder 对话框构造器,可以进行对话框进行设置,并创建对话框对象。
  • setTitle 设置对话框标题,setMessage设置对话框显示的文本内容
  • setNegativeButton 设置对话框显示的否定按钮(Cancel), setPositiveButton设置对话框显示的肯定按钮(OK)
  • show() 显示对话框
  • setItems 设置对话框的列表内容
  • setSingleChoiceItems 设置单选按钮的列表项,setMultiChoiceItems设置多选按钮的列表项
  • setView 设置自定义视图的对话框

默认对话框

如下图所示(显示了标题,内容,两个按钮):

一起学Android之Dialog

关键代码如下:

 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     }

列表对话框

如下图所示(弹出的对话框内容展示为一个列表)用户通过列表进行选择

一起学Android之Dialog

关键代码如下:

 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     }

单选按钮对话框

如下图所示(用户通过单选按钮进行选择):

一起学Android之Dialog

关键代码如下:

 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     }

复选框对话框

如下图所示(对话框的内容可以进行多选):

一起学Android之Dialog

关键代码如下:

 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     }

自定义对话框


如下图所示(用户可以在弹出的对话框中输入内容等信息)

一起学Android之Dialog

关键代码如下:

 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     }

备注


记录学习,记录进步!