Android学习——Dialog

一、Dialog对话框:
(一)、分类:
  1. AlertDialog   警告对话框(提示对话框)
  2. ProgressDialog    进度对话框
  3. DatePickerDialog   日期选择对话框
  4. TimePickerDialog   时间选择对话框
  5. 自定义对话框登录对话框、关于对话框)
  6. 列表对话框
    • 普通列表对话框
    • 单选列表对话框
    • 多选列表对话框
    • 带图标的列表对话框

(二)、AlertDialog ——简单对话框: 
1、类结构:
java.lang.Object
   ↳  android.app.Dialog
      ↳  android.app.AlertDialog
 
2、创建AlertDialog对话框的步骤
  1. 创建AlertDialog.Builder对象,该对象能创建AlertDialog;
  2. 调用Builder对象的方法设置图标、标题、内容、按钮等;
    • setTitle():为对话框设置标题
    • setIcon ():设置图标
    • setMessage ():设置要显示的信息
    • setNegativeButton ():设置取消按钮
    • setPositiveButton ():设置确定按钮
    • setNeutralButton ():设置中立按钮
  3. 调用Builder对象的create()方法创建AlertDialog对话框;
  4. 调用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对话框的步骤
  1. 创建AlertDialog.Builder对象,该对象能创建AlertDialog;
  2. 调用Builder对象的方法设置图标、标题、内容、按钮等;
    • setTitle():为对话框设置标题
    • setIcon ():设置图标
    • setMessage ():设置要显示的信息
    • setNegativeButton ():设置取消按钮
    • setPositiveButton ():设置确定按钮
    • setNeutralButton ():设置中立按钮
    • setItems ():为对话框添加列表项
    • setSingleChoiceItems ():为对话框添加单选列表项
    • setMultiChoiceItems ():为对话框添加多选列表项
    • setAdapter ():为对话框添加带图标的列表项
  3. 调用Builder对象的create()方法创建AlertDialog对话框;
  4. 调用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. 带图标的列表dialog
button_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对话框的步骤
  1. 创建AlertDialog.Builder对象,该对象能创建AlertDialog;
  2. 调用Builder对象的方法设置图标、标题、内容、按钮等;
  • setTitle():为对话框设置标题
  • setIcon ():设置图标
  • setMessage ():设置要显示的信息
  • setNegativeButton ():设置取消按钮
  • setPositiveButton ():设置确定按钮
  • setNeutralButton ():设置中立按钮
  1. 自定义布局文件;
  2. 使用LayoutInflater  inflater()方法填充自定义的布局文件,返回view对象。用该对象的findViewById()方法加载自定义布局上所有控件;
  3. 调用Builder对象的setView()方法加载view对象;
  4. 调用Builder对象的create()方法创建AlertDialog对话框;
  5. 调用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();




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值