android UI 组件-对话框

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zz531987464/article/details/51755926


android提供了以下四种常用的对话框,分别为

AlertDialog:功能最全,实际应用最为广泛

ProgressDialog:进度对话框

DatePickerDialog:日期选择对话框

TimePickerDialog:时间选择对话框

后三个对话框都是AlertDialog的子类。

1.普通对话框

<span style="font-size:14px;">    //普通对话框
    public void c1(View v){ 
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("确认删除"); //设置标题
        builder.setMessage("请确认删除吗?"); //设置弹窗消息内容
        //设置点击确认所需要做的事情
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "确认删除",Toast.LENGTH_LONG).show();
            }
        });
        //设置点击取消时干的事情
        builder.setNegativeButton("取消", null);
        builder.show();
    }</span>

2.单选对话框

<span style="font-size:14px;">    //单选对话框
    public void c2(View v){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final String[] items = {"第一选项","第二选项","第三选项","第四选项"};//内部类访问外部变量必须final,防止变量被更改
        builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { //参数二表示默认的被选中的是哪一项,0表示第一项
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, items[which]+"被选中("+which+")",Toast.LENGTH_LONG).show();

            }
        });
        //显示多话框
        builder.show();
    }</span>
调用setSingleChoiceItems()方法时既可以传入数组作为参数,也可以传入Cursor(相当于数据库查询结果集)作为参数,还可以传入ListAdapter作为参数

3.多选对话框

<span style="font-size:14px;">    String[] items = {"第一选项","第二选项","第三选项","第四选项"};
    boolean[] checkedItems = {true, true, false, true};//默认哪些项被选中
    //多选对话框
    public void c3(View v){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                Toast.makeText(MainActivity.this, items[which] + "被点击了,状态是:" + isChecked, 0).show();
                checkedItems[which] = isChecked;//将选中记录保存在数组中,为下次打开存档
            }
        });
        builder.show();
    }</span>

setMultiChoiceItems()方法添加多选列表时,需要传入一个boolean[ ]参数,该参数有两个作用:1.设置初始化时选中哪些列表项 2.该boolean[ ]类型的参数还可用于动态地获取多选列表项中列表项的选中状态。

4.无实时进度对话框

<span style="font-size:14px;">    //无实时进度对话框
    public void c4(View v){
        final ProgressDialog dialog = ProgressDialog.show(MainActivity.this, null, "正在拼命加载中...");
        //在子线程中睡眠三秒钟,不能在主线程中睡眠
        new Thread() {
            public void run() {
                SystemClock.sleep(3000);
                dialog.dismiss();//弹窗消失
            };
        }.start();
    }</span>

5.有实施进度对话框

<span style="font-size:14px;">    //有实时进度对话框
    final static int MAX_PROGRESS = 100;
    private int[] data = new int[50]; //模拟填充长度为50的数组
    int progressStatus = 0;
    int hasData = 0;
    ProgressDialog pd1;
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg)
        {
            //传输一个特定的值,表示是由该程序触发的
            if (msg.what == 0x123)
            {
                pd1.setProgress(progressStatus);
            }
        }
    };
    public void c5(View v){
        progressStatus = 0;
        pd1 = new ProgressDialog(MainActivity.this);
        pd1.setTitle("数据正在计算中"); //设置对话夸俺标题
        pd1.setMessage("计算完成百分比"); //设置对话框显示的内容
        pd1.setMax(MAX_PROGRESS);
        pd1.setCancelable(false);//设置对话框不能用“取消”按钮关闭
        pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条风格
        pd1.setIndeterminate(false);//设置进度条是否显示进度
        pd1.show();
        new Thread(){
            public void run(){
                while(progressStatus < MAX_PROGRESS) {
                    progressStatus = MAX_PROGRESS * doWork() / data.length;//获取耗时操作的完成百分比
                    handler.sendEmptyMessage(0x123); //发送空消息到Handler
                }
                if (progressStatus >= MAX_PROGRESS){
                    pd1.dismiss();//计算完成关闭对话框
                }
            }
        }.start();
    }
    public int doWork(){
        data[hasData++] = (int)(Math.random()*100);
        try {
            Thread.sleep(100);
        }catch(InterruptedException e){
            e.printStackTrace();
        }
        return hasData;
    }</span>

6.自定义View对话框

<span style="font-size:14px;">    //自定义对话框
    private static final String tag = "login";
    public void c6(View v) {
        final TableLayout loginForm = (TableLayout) getLayoutInflater().inflate(R.layout.login, null);//加载login.xml文件,返回对应的TableLayout作为View
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("自定义View对话框");
        builder.setView(loginForm); //设置对话框显示的view对象
        builder.setPositiveButton("登录", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //点击登陆时执行的动作
                Log.i(tag, "您点击了登录按钮");
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Log.i(tag, "取消登录");
            }
        });
        builder.show();
    }</span>

7.DatePickerDialog、TimePickerDialog

  <span style="font-size:14px;">      Button dateBn = (Button)findViewById(R.id.date);
        Button timeBn = (Button)findViewById(R.id.time);
        dateBn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                Calendar c = Calendar.getInstance();
                // 直接创建一个DatePickerDialog对话框实例,并将它显示出来
                new DatePickerDialog(MainActivity.this,
                        // 绑定监听器
                        new DatePickerDialog.OnDateSetListener()
                        {
                            @Override
                            public void onDateSet(DatePicker dp, int year,
                                                  int month, int dayOfMonth)
                            {
                                Toast.makeText(MainActivity.this,"您选择了:" + year + "年" + (month + 1) + "月" + dayOfMonth + "日",0).show();
                            }
                        }
                        //设置初始日期
                        , c.get(Calendar.YEAR)
                        , c.get(Calendar.MONTH)
                        , c.get(Calendar.DAY_OF_MONTH)).show();
            }
        });</span>

    <span style="font-size:14px;">    //为“设置时间”按钮绑定监听器
        timeBn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                Calendar c = Calendar.getInstance();
                // 创建一个TimePickerDialog实例,并把它显示出来
                new TimePickerDialog(MainActivity.this,
                        // 绑定监听器
                        new TimePickerDialog.OnTimeSetListener()
                        {
                            @Override
                            public void onTimeSet(TimePicker tp, int hourOfDay,
                                                  int minute)
                            {
                                Toast.makeText(MainActivity.this,"您选择了:" + hourOfDay + "时" + minute + "分", 0).show();
                            }
                        }
                        //设置初始时间
                        , c.get(Calendar.HOUR_OF_DAY)
                        , c.get(Calendar.MINUTE)
                        //true表示采用24小时制
                        , true).show();
            }
        });</span>

猜你喜欢

转载自blog.csdn.net/zz531987464/article/details/51755926