开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息。如:用户提示、进度展示、时间设置、日期设置等。
下面我和大家一些学习下Android中常用的几种Dialog吧~
首先,先介绍下 Dialog 中那些类的关系
先来一波源码
从上述代码中,我们可以看出:
Dialog 类 是一个基类。且源码文档中也给出了说明:
Known Direct Subclasses(已知子类)
AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation
开发中,与:进度、时间、日历 有关的Dialog,继承于AlertDialog。源码文档如下述:
Known Direct Subclasses(已知子类)
DatePickerDialog, ProgressDialog, TimePickerDialog
既然明确了继承关系,那么我们就来用代码演示下开发中最基本的使用方式(此处只做一些基本的使用演示,更高级的使用后续再和大家共同学习~)
普通的对话框代码演示
//创建一个 AlertDialog.Builder 对象 AlertDialog.Builder builder = new AlertDialog.Builder(this); //给对话框添加title builder.setTitle("普通对话框"); //给对话框添加内容 builder.setMessage("这是一个内容"); //给对话框添加点击事件 builder.setNeutralButton("未知", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.e("对话框", "未知 which = " + which); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.e("对话框", "取消 which = " + which); } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.e("对话框", "确定 which = " + which); } }); //切记勿忘~开启dialog builder.show();效果图(机型不同,展示可能稍有差异,也可以自定义样式)
代码演示
//给 AlertDialog 设置单选(四种参数形式) //Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem, final OnClickListener listener) //Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn, final OnClickListener listener) //Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) //setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) //参数1:所有选项。参数2:默认一个选择。参数3:点击事件监听 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("单选对话框"); String[] items = new String[]{"男", "女", "都不是"}; builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { @Override //which:点击位置 public void onClick(DialogInterface dialog, int which) { Log.e("对话框", "which = " + which); } }); builder.show();效果图(机型不同,展示可能稍有差异,也可以自定义样式)
代码演示
//给 AlertDialog 设置多选(三种参数形式) //Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems, final OnMultiChoiceClickListener listener) //Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn, final OnMultiChoiceClickListener listener) //Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener) AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("多选对话框"); String[] items = new String[]{"西瓜", "葡萄", "香蕉", "苹果", "都要"}; boolean[] checks = new boolean[]{true, false, false, false, false}; builder.setMultiChoiceItems(items, checks, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { Log.e("对话框", "which = " + which + ", isChecked = " + isChecked); } }); builder.show();