一、Dialog对话框:
(一)、分类:
- AlertDialog 警告对话框(提示对话框)
- ProgressDialog 进度对话框
- DatePickerDialog 日期选择对话框
- TimePickerDialog 时间选择对话框
- 自定义对话框(登录对话框、关于对话框)
- 列表对话框
- 普通列表对话框
- 单选列表对话框
- 多选列表对话框
- 带图标的列表对话框
(二)、AlertDialog ——简单对话框:
1、类结构:
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
2、创建AlertDialog对话框的步骤:
- 创建AlertDialog.Builder对象,该对象能创建AlertDialog;
- 调用Builder对象的方法设置图标、标题、内容、按钮等;
- setTitle():为对话框设置标题
- setIcon ():设置图标
- setMessage ():设置要显示的信息
- setNegativeButton ():设置取消按钮
- setPositiveButton ():设置确定按钮
- setNeutralButton ():设置中立按钮
- 调用Builder对象的create()方法创建AlertDialog对话框;
- 调用AlertDialog的show()方法来显示对话框。
3、核心代码:
Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("提示"); builder.setMessage("确认退出吗?"); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { text_main_info.setText("您点击了:" + which); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { text_main_info.setText("您点击了:" + which); } }); builder.setNeutralButton("中立", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { text_main_info.setText("您点击了:" + which); } }); builder.create().show();
(三)、AlertDialog——列表对话框:
1、类结构:
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
2、创建列表AlertDialog对话框的步骤:
- 创建AlertDialog.Builder对象,该对象能创建AlertDialog;
- 调用Builder对象的方法设置图标、标题、内容、按钮等;
- setTitle():为对话框设置标题
- setIcon ():设置图标
- setMessage ():设置要显示的信息
- setNegativeButton ():设置取消按钮
- setPositiveButton ():设置确定按钮
- setNeutralButton ():设置中立按钮
- setItems ():为对话框添加列表项
- setSingleChoiceItems ():为对话框添加单选列表项
- setMultiChoiceItems ():为对话框添加多选列表项
- setAdapter ():为对话框添加带图标的列表项
- 调用Builder对象的create()方法创建AlertDialog对话框;
- 调用AlertDialog的show()方法来显示对话框。
3、核心代码:
【备注:使用setItems ()、setSingleChoiceItems ()、setMultiChoiceItems () 、setAdapter()能得到不同的结果。】
//A. 普通列表button_main_simpleListDialog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择颜色:"); final String[] arrColor = new String[] { "红色", "绿色","蓝色" }; // 往对话框中放置普通列表 builder.setItems(arrColor, new OnClickListener() { // 以下代码是模拟:勾选选项后,文字颜色和文本框背景颜色相应发生改变 @Override public void onClick(DialogInterface dialog , int which) { text_main_info.setText(arrColor[which]); switch (which) { case 0: text_main_info.setBackgroundColor(Color.RED); break; case 1: text_main_info.setBackgroundColor(Color.GREEN); break; case 2: text_main_info.setBackgroundColor(Color.BLUE); break; default: break; } } }); builder.show(); } });
//B. 单选列表button_main_singleListDialog .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择颜色:"); final String[] arrColor = new String[] { "红色", "绿色","蓝色" }; // 往对话框中放置单选列表 builder.setSingleChoiceItems(arrColor, 0, new OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { position = which;//通过这个监听器获取到点击的是第几个 } }); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { text_main_info.setText(arrColor[position]); switch (position) { case 0: text_main_info.setBackgroundColor(Color.RED); break; case 1: text_main_info.setBackgroundColor(Color.GREEN); break; case 2: text_main_info.setBackgroundColor(Color.BLUE); break; default: break; } } }); builder.show(); } });
//C. 多选列表button_main_multiListDialog .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择颜色:"); final String[] hobbyArr = new String[] { "看书", "学习","饮食", "爬山", "绘画" }; // 将多选项中每次勾选的结果放到一个pos数组中。 pos = new boolean[hobbyArr.length]; // 往对话框中放置多选列表 builder.setMultiChoiceItems(hobbyArr, null, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog,int which, boolean isChecked) { pos[which] = isChecked;//将每一项被勾选的状态放到一个boolean型的数组中 } }); // 多选列表项必须要使用确认按钮才能最终获得所有勾选的数据。 builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { // 将所有的勾选项放到一个字符串中 StringBuilder sb = new StringBuilder(); for (int i = 0; i < pos.length; i++) { if (pos[i]) { sb.append(hobbyArr[i]); sb.append("、"); } } text_main_info.setText("您勾选了:" + sb.toString()); } }); builder.show(); } });
//D. 带图标的列表dialogbutton_main_adapterListDialog .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("手机设置:"); // 定义数据源。以下是模拟数据。真实工作中,有可能是从网络上获取数据,也有可能是从xml配置文件中获取数据。 // 考虑到后期维护,很少在java文件中以定义数组的形式作为适配器的数据来源。 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < settingArr.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("settingType", settingArr[i]); map.put("imageId", imageId[i]); list.add(map); } // 使用SimpleAdapter将数据源和自定义布局文件结合到一起。 SimpleAdapter adapter = new SimpleAdapter( MainActivity.this, list, R.layout.item_dialog, new String[] { "settingType", "imageId" }, new int[] { R.id.text_item_dialog, R.id.imageView_item_dialog }); // 调用builder的setAdapter()方法将适配器加载到对话框中。 builder.setAdapter(adapter, new OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { text_main_info.setText("您选择设置:" + settingArr[which]); } }); // 显示对话框 builder.show(); } });
(四)、AlertDialog——自定义对话框:
1、类结构:
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
2、创建自定义AlertDialog对话框的步骤:
- 创建AlertDialog.Builder对象,该对象能创建AlertDialog;
- 调用Builder对象的方法设置图标、标题、内容、按钮等;
- setTitle():为对话框设置标题
- setIcon ():设置图标
- setMessage ():设置要显示的信息
- setNegativeButton ():设置取消按钮
- setPositiveButton ():设置确定按钮
- setNeutralButton ():设置中立按钮
- 自定义布局文件;
- 使用LayoutInflater 的 inflater()方法填充自定义的布局文件,返回view对象。用该对象的findViewById()方法加载自定义布局上所有控件;
- 调用Builder对象的setView()方法加载view对象;
- 调用Builder对象的create()方法创建AlertDialog对话框;
- 调用AlertDialog的show()方法来显示对话框。
3、核心代码:本示例代码中写了一个显示登录窗口的登录框。
【备注:】采用LayoutInflater去填充布局,返回view对象。
View view = null; Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("管理员登录:"); LayoutInflater mInflater = LayoutInflater.from(MainActivity.this); view = mInflater.inflate(R.layout.loginform_main, null); final EditText edit_loginform_username = (EditText) view .findViewById(R.id.edit_loginform_username); final EditText edit_loginform_password = (EditText) view .findViewById(R.id.edit_loginform_password); builder.setView(view); builder.setPositiveButton("登录", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String username = edit_loginform_username.getText() .toString().trim(); String password = edit_loginform_password.getText() .toString().trim(); if (username.length() < 1 || password.length() < 1) { text_main_info.setText("用户名或密码不可以为空!"); } else { StringBuilder sb = new StringBuilder(); sb.append("您的登录信息:"); sb.append("用户名:"); sb.append(username); sb.append("密码:"); sb.append(password); text_main_info.setText(sb.toString()); } } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //此处进行异步任务访问网络等处理。 } }); builder.create().show();
(五)、ProgressDialog——进度对话框:
1、类结构:
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
↳ android.app.ProgressDialog
2、创建 ProgressDialog 对话框的步骤:
- 实例化ProgressDialog,创建出ProgressDialog对象;
- 调用该对象的方法设置图标、标题、内容、按钮等;
- setTitle():为对话框设置标题setIcon ():设置图标setMessage ():设置要显示的信息
- 调用 ProgressDialog 对象的show()方法显示出 ProgressDialog 对话框。
3、核心代码:
ProgressDialog pDialog = new ProgressDialog(MainActivity.this); pDialog.setTitle("提示:"); pDialog.setMessage("数据加载中。。。"); pDialog.show();
(六)、DatePickerDialog——日期选择对话框:
1、类结构:
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
↳ android.app.DatePickerDialog
2、创建 DatePickerDialog 对话框的步骤:
- 实例化 DatePickerDialog ,创建出 DatePickerDialog 对象;
- 调用 DatePickerDialog 对象的show()方法显示出 DatePickerDialog 对话框;
- 绑定监听器:OnDateSetListener().
3、核心代码:
// 获取系统当前日期Calendar calendar = Calendar.getInstance(); DatePickerDialog datePickerDialog = new DatePickerDialog( MainActivity.this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { text_main_info.setText("您选择了:" + year + ":" + (monthOfYear + 1) + ":" + dayOfMonth); } }, calendar.get(Calendar.YEAR), calendar .get(Calendar.MONTH), calendar .get(Calendar.DAY_OF_MONTH)); datePickerDialog.setCancelable(true); datePickerDialog.show();