android-UI组件实例大全(十五)------其他对话框:ProgressDialog,Date/TimePickerDialog
来源:互联网 发布:一个人开了20家淘宝店 编辑:程序博客网 时间:2024/05/17 02:19
一.ProgressDialog:进度对话框
就是一个带有进度条的对话框
有两种创建进度条对话框的方式:
1.直接调用ProgressDialog提供的静态方法show()显示即可
2.创建ProgressDialog,再设置对话框的参数,最后show()出来即可
代码这里分别定义了一个圆形,不带进度显示的条形,带加载的进度条三种进度条提示框
布局文件中只是定义了三个Button,比较简单,这里就不给出了
MainActivity.java:
- <span style="font-family:Comic Sans MS;">public class MainActivity extends Activity {
- private Button btnone;
- private Button btntwo;
- private Button btnthree;
- private ProgressDialog pd1 = null;
- private ProgressDialog pd2 = null;
- private final static int MAXVALUE = 100;
- private int progressStart = 0;
- private int add = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btnone = (Button) findViewById(R.id.btnone);
- btntwo = (Button) findViewById(R.id.btntwo);
- btnthree = (Button) findViewById(R.id.btnthree);
- //定义一个用于更新进度的Handler,因为只能由主线程更新界面,所以要用Handler传递信息
- final Handler hand = new Handler()
- {
- @Override
- public void handleMessage(Message msg) {
- //这里的话如果接受到信息码是123
- if(msg.what == 123)
- {
- //设置进度条的当前值
- pd2.setProgress(progressStart);
- }
- //如果当前大于或等于进度条的最大值,调用dismiss()方法关闭对话框
- if(progressStart >= MAXVALUE)
- {
- pd2.dismiss();
- }
- }
- };
- //1.这个一个普通的圆形的进度条,直接调用静态方法show()
- btnone.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //这里的话参数依次为,上下文别写getApplicationContext会报错的哦,标题,内容,是否显示进度,是否可以用取消按钮关闭
- ProgressDialog.show(MainActivity.this, "资源加载中", "资源加载中,请稍后...",false,true);
- }
- });
- //2.定义一个条形的进度条,但是不带动态更新的
- btntwo.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- pd1 = new ProgressDialog(MainActivity.this);
- //依次设置标题,内容,是否用取消按钮关闭,是否显示进度
- pd1.setTitle("软件更新中");
- pd1.setMessage("软件正在更新中,请稍后...");
- pd1.setCancelable(true);
- //这里是设置进度条的风格,HORIZONTAL是水平进度条,SPINNER是圆形进度条
- pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- pd1.setIndeterminate(true);
- //调用show()方法将ProgressDialog显示出来
- pd1.show();
- }
- });
- //3.定义一个带进度更新的条形进度条
- btnthree.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //初始化属性
- progressStart = 0;
- add = 0;
- //依次设置一些属性
- pd2 = new ProgressDialog(MainActivity.this);
- pd2.setMax(MAXVALUE);
- pd2.setTitle("文件读取中");
- pd2.setMessage("文件加载中,请稍后...");
- //这里设置为不可以通过按取消按钮关闭进度条
- pd2.setCancelable(false);
- pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- //这里设置的是是否显示进度,设为false才是显示的哦!
- pd2.setIndeterminate(false);
- pd2.show();
- //这里的话新建一个线程,重写run()方法,
- new Thread()
- {
- public void run()
- {
- while(progressStart < MAXVALUE)
- {
- //这里的算法是决定进度条变化的,可以按需要写
- progressStart = 2 * usetime() ;
- //把信息码发送给handle让更新界面
- hand.sendEmptyMessage(123);
- }
- }
- }.start();
- }
- //这里设置一个耗时的方法:
- private int usetime() {
- add++;
- try{
- Thread.sleep(100);
- }catch (InterruptedException e) {
- e.printStackTrace();
- }
- return add;
- };
- });
- }
- }</span>
运行截图:
代码解释:
1.调用静态方法显示的环形进度条:show()方法的参数依次为:当前的Activity.this;标题;提示内容;是否显示进度;是否可以按"回退"键关闭
2.另一种的流程是:①new ProgressDialog(当前Activity.this); ②设置标题:setTitle() ③设置内容:setMessage()
④设置是否可通过回退按钮关闭:setCancelable()⑤设置进度条是否显示进度,设置为true的话就会变成第p3中不会动的进度条,setIndeterminate()
⑥设置进度条的类型:两种STYLE_HORIZONTAL水平进度条 STYLE_SPINNER圆形进度条
⑦设置进度条的进度值:setProgress()
3.简单解释下这里为什么要用到handle类,因为这涉及到了线程安全的问题,界面的更新只能够在主线程中进行,
不能够在子线程中进行界面的更新,不然会报错,处理方法就是通过handle类,发送带有信息码的空信息给handle,
判断信息码后进行界面的更新,这里的话就是更新我们进度条的当前值
源码下载:
http://pan.baidu.com/s/1BZT8I
二.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框
这里的话先要说明一点啊
这个Date/TimePickerDialog只是供用户来选择日期时间,对于android系统的系统时间,日期没有任何影响,google暂时没有公布系统日期时间设置的API,
如果要在app中设置的话,要重新编译android的系统源码.灰常麻烦哦!
这两个灰常相似,这里的话就把他们写在一个程序中,两个构造方法:
DatePickerDialog(当前视图.this;DatePickerDialog.OnDateSetListener()监听器;年;月;日)
TimePickerDialog(当前视图.this;TimePickerDialog.OnTimeSetListener()监听器;小时,分钟,是否采用24小时制)
布局文件:只有两个普通按钮,略过
MainActivity.java:
代码如下:
- <span style="font-family:Comic Sans MS;">public class MainActivity extends Activity {
- private Button btndate;
- private Button btntime;
- private String result = "";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btndate = (Button) findViewById(R.id.btndate);
- btntime = (Button) findViewById(R.id.btntime);
- btndate.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //这句话是获得当前的系统时间
- Calendar cale = Calendar.getInstance();
- /*这里的话因为比较麻烦,所有就直接new一个DatePickerDialog对象,构造方法中的参数依次为:
- 上下文,OnDateSetListener的监听器,整形的年,月,日
- */
- new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {
- @Override
- public void onDateSet(DatePicker view, int year, int monthOfYear,
- int dayOfMonth) {
- result += "你选择的是"+year+"年"+monthOfYear+"月"+dayOfMonth+"日";
- Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
- }
- }
- ,cale.get(Calendar.YEAR)
- ,cale.get(Calendar.MONTH)
- ,cale.get(Calendar.DAY_OF_MONTH)).show();
- }
- });
- btntime.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Calendar cale = Calendar.getInstance();
- new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
- @Override
- public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
- result = "";
- result += "您选择的时间是:"+hourOfDay+"时"+minute+"分";
- Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
- }
- }, cale.get(Calendar.HOUR_OF_DAY), cale.get(Calendar.MINUTE), true).show();
- }
- });
- }
- }</span>
运行截图:
代码解释:
1.Calendar c = Calendar.getInstance()获取当前的系统时间
2.Calendar.YEAR / MONTH / DAY_OF_MONTH / HOUR_OF_DAY / MINUTE 依次为:年,月,日,时,分
源码下载:
http://pan.baidu.com/s/1ziFFk
- android-UI组件实例大全(十五)------其他对话框:ProgressDialog,Date/TimePickerDialog
- android 组件 ProgressDialog实例
- android progressdialog 对话框试用实例
- android-UI组件实例大全(十四)------对话框的父类:AlertDialog
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- Android UI学习 - 对话框 (AlertDialog & ProgressDialog)
- 【Android】安卓UI 进度对话框ProgressDialog
- Android之Date/TimePickerDialog
- 【Android 开发】:UI控件之 TimePickerDialog 时间对话框的使用
- android UI 组件-对话框
- android UI 对话框大全
- Android UI系列中的Dialog,包括DatePickerDialog、TimePickerDialog、Toasts以及ProgressDialog
- 开源还是商用?十大云运维监控工具横评
- android-UI组件实例大全(十四)------对话框的父类:AlertDialog
- SoapUI———mock数据工具
- 由于CRS磁盘dismount造成的CRS进程无法启动问题
- Could not open JPA EntityManager for transaction; nested exception is javax.pers
- android-UI组件实例大全(十五)------其他对话框:ProgressDialog,Date/TimePickerDialog
- 5.mysql 连接字符串为空时的处理
- 关于下拉框选择
- 栅栏的木料(二分+dfs)
- 请听一个故事------>一次皆大欢喜的程序员跳槽加薪
- iOS 开发:AVPlayer播放视频
- 最少步数
- window 下nginx使用和配置
- typedef用法