一.ProgressDialog:进度对话框
就是一个带有进度条的对话框
有两种创建进度条对话框的方式:
1.直接调用ProgressDialog提供的静态方法show()显示即可
2.创建ProgressDialog,再设置对话框的参数,最后show()出来即可
代码这里分别定义了一个圆形,不带进度显示的条形,带加载的进度条三种进度条提示框
布局文件中只是定义了三个Button,比较简单,这里就不给出了
MainActivity.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| 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); final Handler hand = new Handler() { @Override public void handleMessage(Message msg) { if(msg.what == 123) { pd2.setProgress(progressStart); } if(progressStart >= MAXVALUE) { pd2.dismiss(); } } }; btnone.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ProgressDialog.show(MainActivity.this, "资源加载中", "资源加载中,请稍后...",false,true); } }); btntwo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pd1 = new ProgressDialog(MainActivity.this); pd1.setTitle("软件更新中"); pd1.setMessage("软件正在更新中,请稍后..."); pd1.setCancelable(true); pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd1.setIndeterminate(true); pd1.show(); } }); 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); pd2.setIndeterminate(false); pd2.show(); new Thread() { public void run() { while(progressStart < MAXVALUE) { progressStart = 2 * usetime() ; hand.sendEmptyMessage(123); } } }.start(); } private int usetime() { add++; try{ Thread.sleep(100); }catch (InterruptedException e) { e.printStackTrace(); } return add; }; }); } }
|
运行截图:
代码解释:
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:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| 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(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(); } }); } }
|
运行截图:
代码解释:
Calendar c = Calendar.getInstance()
获取当前的系统时间
Calendar.YEAR / MONTH / DAY_OF_MONTH / HOUR_OF_DAY / MINUTE
依次为:年,月,日,时,分
源码下载:
http://pan.baidu.com/s/1ziFFk