android UI 组件-对话框

来源:互联网 发布:软件p光头 编辑:程序博客网 时间:2024/06/05 19:28


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>
0 0
原创粉丝点击