一起学Android之Dialog

时间:2019-03-24 01:12:28   收藏:0   阅读:157

概述

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

什么是AlertDialog?

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

创建步骤

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

涉及知识点

默认对话框

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

技术分享图片

关键代码如下:

 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     }

备注


记录学习,记录进步!

原文:https://www.cnblogs.com/hsiang/p/10586223.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!