Android--Dialog对话框

简介:

Android开发当中,在界面上弹出一个Dialog对话框使我们经常需要做的,本篇做一下记录,以备遗忘时查询。

dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。

Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. java.lang.Object  
  2.         android.app.Dialog  
  3.   
  4. Known Direct Subclasses  
  5. AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation  
  6.   
  7. Known Indirect Subclasses  
  8. DatePickerDialog, ProgressDialog, TimePickerDialog  

我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造。

我们看到,AlertDialog是Dialog的一个直接子类。

使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框。

在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. 1.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)  
  2. 这是一个相当于OK、确定操作的按钮,  
  3.   
  4. 2.setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)  
  5. 这是一个相当于取消操作的按钮。  
  6.   
  7. 3. setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)  
  8. 这个是相当于一个忽略操作的按钮。  

我们每一种action buttons最多只能出现一个,即弹出对话框最多只能出现一个PositiveButton。

接下来我们通过一个一个的具体实例来看看我们常用的几种AlertDialog对话框。

1.弹出一个警告框,并有三个按钮可选择

我们来看看代码部分:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. button.setOnClickListener(new OnClickListener()  
  2.         {  
  3.             @Override  
  4.             public void onClick(View v)  
  5.             {  
  6.                 //    通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象  
  7.                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  8.                 //    设置Title的图标  
  9.                 builder.setIcon(R.drawable.ic_launcher);  
  10.                 //    设置Title的内容  
  11.                 builder.setTitle("弹出警告框");  
  12.                 //    设置Content来显示一个信息  
  13.                 builder.setMessage("确定删除吗?");  
  14.                 //    设置一个PositiveButton  
  15.                 builder.setPositiveButton("确定"new DialogInterface.OnClickListener()  
  16.                 {  
  17.                     @Override  
  18.                     public void onClick(DialogInterface dialog, int which)  
  19.                     {  
  20.                         Toast.makeText(MainActivity.this"positive: " + which, Toast.LENGTH_SHORT).show();  
  21.                     }  
  22.                 });  
  23.                 //    设置一个NegativeButton  
  24.                 builder.setNegativeButton("取消"new DialogInterface.OnClickListener()  
  25.                 {  
  26.                     @Override  
  27.                     public void onClick(DialogInterface dialog, int which)  
  28.                     {  
  29.                         Toast.makeText(MainActivity.this"negative: " + which, Toast.LENGTH_SHORT).show();  
  30.                     }  
  31.                 });  
  32.                 //    设置一个NeutralButton  
  33.                 builder.setNeutralButton("忽略"new DialogInterface.OnClickListener()  
  34.                 {  
  35.                     @Override  
  36.                     public void onClick(DialogInterface dialog, int which)  
  37.                     {  
  38.                         Toast.makeText(MainActivity.this"neutral: " + which, Toast.LENGTH_SHORT).show();  
  39.                     }  
  40.                 });  
  41.                 //    显示出该对话框  
  42.                 builder.show();  
  43.             }  
  44.         });  

我们如果要创建一个AlertDialog对话框,需要使用AlertDialog的一个内部类,即AlertDialog.Builder来构建一个AlertDialog的对话框,然后通过setXX方法来设置我们想要显示的内容即可。

我们看到,我们一共设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框(这个在后面随笔中会讲解)来弹出一下我们的一些信息,which方法表示的是action button所代表的int值:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. positive:  -1  
  2. negative:  -2  
  3. neutral:  -3  

我们可以知道,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。


[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import android.app.Activity;  
  2. import android.app.AlertDialog;  
  3. import android.content.DialogInterface;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.Toast;  
  10.    
  11. public class SingleChoiceItemsTest extends Activity implements OnClickListener  
  12. {  
  13.     private String[] province = new String[] { "上海""北京""湖南""湖北""海南" };  
  14.     private Button btnSingleChoiceList;  
  15.     // 单击事件对象的实例  
  16.     private ButtonOnClick buttonOnClick = new ButtonOnClick(1);  
  17.    
  18.     /** Called when the activity is first created. */  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState)  
  21.     {  
  22.        super.onCreate(savedInstanceState);  
  23.        setContentView(R.layout.main);  
  24.    
  25.        btnSingleChoiceList = (Button) findViewById(R.id.btnSingleChoice);  
  26.        btnSingleChoiceList.setOnClickListener(this);  
  27.     }  
  28.    
  29.     @Override  
  30.     public void onClick(View v)  
  31.     {  
  32.        showSingleChoiceButton();  
  33.     }  
  34.    
  35.     // 在单选选项中显示 确定和取消按钮  
  36.     //buttonOnClickg变量的数据类型是ButtonOnClick,一个单击事件类  
  37.     private void showSingleChoiceButton()  
  38.     {  
  39.        AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  40.        builder.setTitle("请选择省份");  
  41.        builder.setSingleChoiceItems(province, 0, buttonOnClick);  
  42.        builder.setPositiveButton("确定", buttonOnClick);  
  43.        builder.setNegativeButton("取消", buttonOnClick);  
  44.        builder.show();  
  45.     }  
  46.    
  47.     private class ButtonOnClick implements DialogInterface.OnClickListener  
  48.     {  
  49.         
  50.        private int index; // 表示选项的索引  
  51.    
  52.        public ButtonOnClick(int index)  
  53.        {  
  54.            this.index = index;  
  55.        }  
  56.    
  57.        @Override  
  58.        public void onClick(DialogInterface dialog, int which)  
  59.        {  
  60.            // which表示单击的按钮索引,所有的选项索引都是大于0,按钮索引都是小于0的。  
  61.            if (which >= 0)  
  62.            {  
  63.               //如果单击的是列表项,将当前列表项的索引保存在index中。  
  64.               //如果想单击列表项后关闭对话框,可在此处调用dialog.cancel()  
  65.               //或是用dialog.dismiss()方法。  
  66.               index = which;  
  67.            }  
  68.            else  
  69.            {  
  70.               //用户单击的是【确定】按钮  
  71.               if (which == DialogInterface.BUTTON_POSITIVE)  
  72.               {  
  73.                   //显示用户选择的是第几个列表项。  
  74.                   final AlertDialog ad = new AlertDialog.Builder(  
  75.                           SingleChoiceItemsTest.this).setMessage(  
  76.                           "你选择的地区是:" + index + ":" + province[index]).show();  
  77.                   //五秒钟后自动关闭。  
  78.                   Handler hander = new Handler();  
  79.                   Runnable runnable = new Runnable()  
  80.                   {  
  81.    
  82.                      @Override  
  83.                      public void run()  
  84.                      {  
  85.                          ad.dismiss();  
  86.                      }  
  87.                   };  
  88.                   hander.postDelayed(runnable, 5 * 1000);  
  89.               }  
  90.               //用户单击的是【取消】按钮  
  91.               else if (which == DialogInterface.BUTTON_NEGATIVE)  
  92.               {  
  93.                   Toast.makeText(SingleChoiceItemsTest.this"你没有选择任何东西",  
  94.                           Toast.LENGTH_LONG);  
  95.               }  
  96.            }  
  97.        }  
  98.     }  
  99. }  

弹出一个下拉单选框


[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. button3.setOnClickListener(new OnClickListener()  
  2.         {  
  3.             @Override  
  4.             public void onClick(View v)  
  5.             {  
  6.                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  7.                 builder.setIcon(R.drawable.ic_launcher);  
  8.                 builder.setTitle("请选择性别");  
  9.                 final String[] sex = {"男""女""未知性别"};  
  10.                 //    设置一个单项选择下拉框  
  11.                 /** 
  12.                  * 第一个参数指定我们要显示的一组下拉单选框的数据集合 
  13.                  * 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上 
  14.                  * 第三个参数给每一个单选项绑定一个监听器 
  15.                  */  
  16.                 builder.setSingleChoiceItems(sex, 1new DialogInterface.OnClickListener()  
  17.                 {  
  18.                     @Override  
  19.                     public void onClick(DialogInterface dialog, int which)  
  20.                     {  
  21.                         Toast.makeText(MainActivity.this"性别为:" + sex[which], Toast.LENGTH_SHORT).show();  
  22.                     }  
  23.                 });  
  24.                 builder.setPositiveButton("确定"new DialogInterface.OnClickListener()  
  25.                 {  
  26.                     @Override  
  27.                     public void onClick(DialogInterface dialog, int which)  
  28.                     {  
  29.                           
  30.                     }  
  31.                 });  
  32.                 builder.setNegativeButton("取消"new DialogInterface.OnClickListener()  
  33.                 {  
  34.                     @Override  
  35.                     public void onClick(DialogInterface dialog, int which)  
  36.                     {  
  37.                           
  38.                     }  
  39.                 });  
  40.                 builder.show();  
  41.             }  
  42.         });  
注意 在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失


弹出一个下拉多选框

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. button4.setOnClickListener(new OnClickListener()  
  2.         {  
  3.             @Override  
  4.             public void onClick(View v)  
  5.             {  
  6.                 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
  7.                 builder.setIcon(R.drawable.ic_launcher);  
  8.                 builder.setTitle("爱好");  
  9.                 final String[] hobbies = {"篮球""足球""网球""斯诺克"};  
  10.                 //    设置一个单项选择下拉框  
  11.                 /** 
  12.                  * 第一个参数指定我们要显示的一组下拉多选框的数据集合 
  13.                  * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择, 
  14.                  * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true}; 
  15.                  * 第三个参数给每一个多选项绑定一个监听器 
  16.                  */  
  17.                 builder.setMultiChoiceItems(hobbies, nullnew DialogInterface.OnMultiChoiceClickListener()  
  18.                 {  
  19.                     StringBuffer sb = new StringBuffer(100);  
  20.                     @Override  
  21.                     public void onClick(DialogInterface dialog, int which, boolean isChecked)  
  22.                     {  
  23.                         if(isChecked)  
  24.                         {  
  25.                             sb.append(hobbies[which] + ", ");  
  26.                         }  
  27.                         Toast.makeText(MainActivity.this"爱好为:" + sb.toString(), Toast.LENGTH_SHORT).show();  
  28.                     }  
  29.                 });  
  30.                 builder.setPositiveButton("确定"new DialogInterface.OnClickListener()  
  31.                 {  
  32.                     @Override  
  33.                     public void onClick(DialogInterface dialog, int which)  
  34.                     {  
  35.                           
  36.                     }  
  37.                 });  
  38.                 builder.setNegativeButton("取消"new DialogInterface.OnClickListener()  
  39.                 {  
  40.                     @Override  
  41.                     public void onClick(DialogInterface dialog, int which)  
  42.                     {  
  43.                           
  44.                     }  
  45.                 });  
  46.                 builder.show();  
  47.             }  
  48.         });  

同样,对于下拉多选框,当我们选中其中一个选项时,对话框是不会消失的,只有点击了action button才会消失


转载:http://blog.csdn.net/chaoyu168/article/details/50753095

目录
相关文章
|
4月前
|
Android开发
Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)
Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)
33 0
|
Android开发
Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
292 0
Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
|
1月前
|
Android开发
[Android]AlertDialog对话框
[Android]AlertDialog对话框
15 0
|
8月前
|
Android开发
Android 中ProgressDialog进度条对话框的使用(使用子线程模拟更新进度)
Android 中ProgressDialog进度条对话框的使用(使用子线程模拟更新进度)
100 0
|
8月前
|
Android开发
Android 中AlertDialog警告对话框的使用
Android 中AlertDialog警告对话框的使用
72 0
|
9月前
|
XML Java Android开发
Android 对话框组件 AlertDialog 四种常用方法
Android 对话框组件 AlertDialog 四种常用方法
101 0
|
9月前
|
XML Android开发 数据格式
Android上机实验-4 菜单和对话框
Android上机实验-4 菜单和对话框
108 1
|
10月前
|
Android开发
android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置
android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置
|
Android开发 数据安全/隐私保护 开发者
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )(一)
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )(一)
351 0
【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )(一)
|
Android开发 数据安全/隐私保护
android自定义对话框实现
android自定义对话框
205 0
android自定义对话框实现