博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android--Dialog对话框
阅读量:5957 次
发布时间:2019-06-19

本文共 10052 字,大约阅读时间需要 33 分钟。

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

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

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

java.lang.Object        android.app.DialogKnown Direct SubclassesAlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, PresentationKnown Indirect SubclassesDatePickerDialog, ProgressDialog, TimePickerDialog
我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造。

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

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

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

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.弹出一个警告框,并有三个按钮可选择

我们来看看代码部分:

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()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                        Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show();                    }                });                //    设置一个NeutralButton                builder.setNeutralButton("忽略", new DialogInterface.OnClickListener()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                        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值:

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

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);    }     @Override    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);              }           }       }    }}

弹出一个下拉单选框

button3.setOnClickListener(new OnClickListener()        {            @Override            public void onClick(View v)            {                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);                builder.setIcon(R.drawable.ic_launcher);                builder.setTitle("请选择性别");                final String[] sex = {"男", "女", "未知性别"};                //    设置一个单项选择下拉框                /**                 * 第一个参数指定我们要显示的一组下拉单选框的数据集合                 * 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上                 * 第三个参数给每一个单选项绑定一个监听器                 */                builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                        Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();                    }                });                builder.setPositiveButton("确定", new DialogInterface.OnClickListener()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                                            }                });                builder.setNegativeButton("取消", new DialogInterface.OnClickListener()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                                            }                });                builder.show();            }        });
注意
在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失

弹出一个下拉多选框

button4.setOnClickListener(new OnClickListener()        {            @Override            public void onClick(View v)            {                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);                builder.setIcon(R.drawable.ic_launcher);                builder.setTitle("爱好");                final String[] hobbies = {"篮球", "足球", "网球", "斯诺克"};                //    设置一个单项选择下拉框                /**                 * 第一个参数指定我们要显示的一组下拉多选框的数据集合                 * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,                 * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};                 * 第三个参数给每一个多选项绑定一个监听器                 */                builder.setMultiChoiceItems(hobbies, null, new DialogInterface.OnMultiChoiceClickListener()                {                    StringBuffer sb = new StringBuffer(100);                    @Override                    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();                    }                });                builder.setPositiveButton("确定", new DialogInterface.OnClickListener()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                                            }                });                builder.setNegativeButton("取消", new DialogInterface.OnClickListener()                {                    @Override                    public void onClick(DialogInterface dialog, int which)                    {                                            }                });                builder.show();            }        });

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

转载于:https://www.cnblogs.com/chaoyu/p/6436894.html

你可能感兴趣的文章
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Parallels Desktop12推出 新增Parallels Toolbox
查看>>
Python高效编程技巧
查看>>