天天看点

Android--Dialog对话框

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

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

Android--Dialog对话框

java.lang.object  

        android.app.dialog  

known direct subclasses  

alertdialog, characterpickerdialog, mediaroutechooserdialog, mediaroutecontrollerdialog, presentation  

known indirect subclasses  

datepickerdialog, progressdialog, timepickerdialog  

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

我们看到,alertdialog是dialog的一个直接子类。

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

在alertdialog中,定义按钮都是通过 setxxxbutton 方法来完成,其中一共有3种不同的action buttons供我们选择:

Android--Dialog对话框

1.setpositivebutton(charsequence text, dialoginterface.onclicklistener listener)  

这是一个相当于ok、确定操作的按钮,  

2.setnegativebutton (charsequence text, dialoginterface.onclicklistener listener)  

这是一个相当于取消操作的按钮。  

3. setneutralbutton (charsequence text, dialoginterface.onclicklistener listener)  

这个是相当于一个忽略操作的按钮。  

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

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

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

Android--Dialog对话框

我们来看看代码部分:

Android--Dialog对话框

button.setonclicklistener(new onclicklistener()  

        {  

            @override  

            public void onclick(view v)  

            {  

                //    通过alertdialog.builder这个类来实例化我们的一个alertdialog的对象  

                alertdialog.builder builder = new alertdialog.builder(mainactivity.this);  

                //    设置title的图标  

                builder.seticon(r.drawable.ic_launcher);  

                //    设置title的内容  

                builder.settitle("弹出警告框");  

                //    设置content来显示一个信息  

                builder.setmessage("确定删除吗?");  

                //    设置一个positivebutton  

                builder.setpositivebutton("确定", new dialoginterface.onclicklistener()  

                {  

                    @override  

                    public void onclick(dialoginterface dialog, int which)  

                    {  

                        toast.maketext(mainactivity.this, "positive: " + which, toast.length_short).show();  

                    }  

                });  

                //    设置一个negativebutton  

                builder.setnegativebutton("取消", new dialoginterface.onclicklistener()  

                        toast.maketext(mainactivity.this, "negative: " + which, toast.length_short).show();  

                //    设置一个neutralbutton  

                builder.setneutralbutton("忽略", new dialoginterface.onclicklistener()  

                        toast.maketext(mainactivity.this, "neutral: " + which, toast.length_short).show();  

                //    显示出该对话框  

                builder.show();  

            }  

        });  

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

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

Android--Dialog对话框

positive:  -1  

negative:  -2  

neutral:  -3  

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

Android--Dialog对话框
Android--Dialog对话框

import android.app.activity;  

import android.app.alertdialog;  

import android.content.dialoginterface;  

import android.os.bundle;  

import android.os.handler;  

import android.view.view;  

import android.view.view.onclicklistener;  

import android.widget.button;  

import android.widget.toast;  

public class singlechoiceitemstest extends activity implements onclicklistener  

{  

    private string[] province = new string[] { "上海", "北京", "湖南", "湖北", "海南" };  

    private button btnsinglechoicelist;  

    // 单击事件对象的实例  

    private buttononclick buttononclick = new buttononclick(1);  

    /** called when the activity is first created. */  

    @override  

    public void oncreate(bundle savedinstancestate)  

    {  

       super.oncreate(savedinstancestate);  

       setcontentview(r.layout.main);  

       btnsinglechoicelist = (button) findviewbyid(r.id.btnsinglechoice);  

       btnsinglechoicelist.setonclicklistener(this);  

    }  

    public void onclick(view v)  

       showsinglechoicebutton();  

    // 在单选选项中显示 确定和取消按钮  

    //buttononclickg变量的数据类型是buttononclick,一个单击事件类  

    private void showsinglechoicebutton()  

       alertdialog.builder builder = new alertdialog.builder(this);  

       builder.settitle("请选择省份");  

       builder.setsinglechoiceitems(province, 0, buttononclick);  

       builder.setpositivebutton("确定", buttononclick);  

       builder.setnegativebutton("取消", buttononclick);  

       builder.show();  

    private class buttononclick implements dialoginterface.onclicklistener  

       private int index; // 表示选项的索引  

       public buttononclick(int index)  

       {  

           this.index = index;  

       }  

       @override  

       public void onclick(dialoginterface dialog, int which)  

           // which表示单击的按钮索引,所有的选项索引都是大于0,按钮索引都是小于0的。  

           if (which >= 0)  

           {  

              //如果单击的是列表项,将当前列表项的索引保存在index中。  

              //如果想单击列表项后关闭对话框,可在此处调用dialog.cancel()  

              //或是用dialog.dismiss()方法。  

              index = which;  

           }  

           else  

              //用户单击的是【确定】按钮  

              if (which == dialoginterface.button_positive)  

              {  

                  //显示用户选择的是第几个列表项。  

                  final alertdialog ad = new alertdialog.builder(  

                          singlechoiceitemstest.this).setmessage(  

                          "你选择的地区是:" + index + ":" + province[index]).show();  

                  //五秒钟后自动关闭。  

                  handler hander = new handler();  

                  runnable runnable = new runnable()  

                  {  

                     @override  

                     public void run()  

                     {  

                         ad.dismiss();  

                     }  

                  };  

                  hander.postdelayed(runnable, 5 * 1000);  

              }  

              //用户单击的是【取消】按钮  

              else if (which == dialoginterface.button_negative)  

                  toast.maketext(singlechoiceitemstest.this, "你没有选择任何东西",  

                          toast.length_long);  

}  

弹出一个下拉单选框

Android--Dialog对话框
Android--Dialog对话框

button3.setonclicklistener(new onclicklistener()  

                builder.settitle("请选择性别");  

                final string[] sex = {"男", "女", "未知性别"};  

                //    设置一个单项选择下拉框  

                /** 

                 * 第一个参数指定我们要显示的一组下拉单选框的数据集合 

                 * 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上 

                 * 第三个参数给每一个单选项绑定一个监听器 

                 */  

                builder.setsinglechoiceitems(sex, 1, new dialoginterface.onclicklistener()  

                        toast.maketext(mainactivity.this, "性别为:" + sex[which], toast.length_short).show();  

注意:在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失。

Android--Dialog对话框

弹出一个下拉多选框

Android--Dialog对话框
Android--Dialog对话框

button4.setonclicklistener(new onclicklistener()  

                builder.settitle("爱好");  

                final string[] hobbies = {"篮球", "足球", "网球", "斯诺克"};  

                 * 第一个参数指定我们要显示的一组下拉多选框的数据集合 

                 * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择, 

                 * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true}; 

                 * 第三个参数给每一个多选项绑定一个监听器 

                builder.setmultichoiceitems(hobbies, null, new dialoginterface.onmultichoiceclicklistener()  

                    stringbuffer sb = new stringbuffer(100);  

                    public void onclick(dialoginterface dialog, int which, boolean ischecked)  

                        if(ischecked)  

                        {  

                            sb.append(hobbies[which] + ", ");  

                        }  

                        toast.maketext(mainactivity.this, "爱好为:" + sb.tostring(), toast.length_short).show();  

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

Android--Dialog对话框

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

继续阅读