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
- android UI 组件-对话框
- Android UI组件进阶(2)——仿Windows对话框
- Android UI对话框找茬
- Android UI学习 - 对话框
- Android UI学习 - 对话框
- android ui ->>Dialog对话框
- android UI 对话框大全
- android--UI组件总结
- android--UI组件总结
- android UI组件----菜单
- Android的UI组件
- android UI组件
- android基础UI组件
- Android UI组件
- Android的UI组件 .
- Android UI组件
- Android UI组件
- android UI组件
- Swift中设置tableview的分割线(separator)的样式、颜色、边距
- RAII惯用法:C++资源管理的利器
- Java web使用第三方插件JFreeChart进行图形开发
- C# 多线程的自动管理(线程池)
- "多线程和线程池"-之通俗易懂的介绍+图文,代码解析
- android UI 组件-对话框
- javascript 检查邮件是否正确
- java 容器、数组相互转换
- Eclipse很卡很受不了,这个小技巧能帮上忙
- NAT类型与NAT穿越技术
- Preconditions优雅的检验参数
- linux环境下新建weblogic域
- 用Redis的set指令实现锁
- SevletContext