android-UI组件实例大全(十五)------其他对话框:ProgressDialog,Date/TimePickerDialog

来源:互联网 发布:一个人开了20家淘宝店 编辑:程序博客网 时间:2024/05/17 02:19

一.ProgressDialog:进度对话框

就是一个带有进度条的对话框

有两种创建进度条对话框的方式:

1.直接调用ProgressDialog提供的静态方法show()显示即可

2.创建ProgressDialog,再设置对话框的参数,最后show()出来即可


 代码这里分别定义了一个圆形,不带进度显示的条形,带加载的进度条三种进度条提示框

布局文件中只是定义了三个Button,比较简单,这里就不给出了

MainActivity.java:


[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-family:Comic Sans MS;">public class MainActivity extends Activity {  
  2.   
  3.     private Button btnone;  
  4.     private Button btntwo;  
  5.     private Button btnthree;  
  6.     private ProgressDialog pd1 = null;  
  7.     private ProgressDialog pd2 = null;  
  8.     private final static int MAXVALUE = 100;  
  9.     private int progressStart = 0;  
  10.     private int add = 0;  
  11.       
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_main);  
  16.           
  17.         btnone = (Button) findViewById(R.id.btnone);  
  18.         btntwo = (Button) findViewById(R.id.btntwo);  
  19.         btnthree = (Button) findViewById(R.id.btnthree);  
  20.           
  21.         //定义一个用于更新进度的Handler,因为只能由主线程更新界面,所以要用Handler传递信息  
  22.         final Handler hand = new Handler()  
  23.         {  
  24.             @Override  
  25.             public void handleMessage(Message msg) {  
  26.                 //这里的话如果接受到信息码是123  
  27.                 if(msg.what == 123)  
  28.                 {  
  29.                     //设置进度条的当前值  
  30.                     pd2.setProgress(progressStart);  
  31.                 }  
  32.                 //如果当前大于或等于进度条的最大值,调用dismiss()方法关闭对话框  
  33.                 if(progressStart >= MAXVALUE)  
  34.                 {  
  35.                     pd2.dismiss();  
  36.                 }  
  37.             }  
  38.         };  
  39.           
  40.           
  41.         //1.这个一个普通的圆形的进度条,直接调用静态方法show()  
  42.         btnone.setOnClickListener(new OnClickListener() {  
  43.               
  44.             @Override  
  45.             public void onClick(View v) {  
  46.                 //这里的话参数依次为,上下文别写getApplicationContext会报错的哦,标题,内容,是否显示进度,是否可以用取消按钮关闭  
  47.                 ProgressDialog.show(MainActivity.this"资源加载中""资源加载中,请稍后...",false,true);  
  48.             }  
  49.         });  
  50.         //2.定义一个条形的进度条,但是不带动态更新的  
  51.         btntwo.setOnClickListener(new OnClickListener() {   
  52.               
  53.             @Override  
  54.             public void onClick(View v) {  
  55.                 pd1 = new ProgressDialog(MainActivity.this);  
  56.                 //依次设置标题,内容,是否用取消按钮关闭,是否显示进度  
  57.                 pd1.setTitle("软件更新中");  
  58.                 pd1.setMessage("软件正在更新中,请稍后...");  
  59.                 pd1.setCancelable(true);  
  60.                 //这里是设置进度条的风格,HORIZONTAL是水平进度条,SPINNER是圆形进度条  
  61.                 pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  62.                 pd1.setIndeterminate(true);  
  63.                 //调用show()方法将ProgressDialog显示出来  
  64.                 pd1.show();  
  65.                   
  66.             }  
  67.         });  
  68.         //3.定义一个带进度更新的条形进度条  
  69.         btnthree.setOnClickListener(new OnClickListener() {  
  70.               
  71.             @Override  
  72.             public void onClick(View v) {  
  73.                 //初始化属性  
  74.                 progressStart = 0;  
  75.                 add = 0;  
  76.                 //依次设置一些属性  
  77.                 pd2 = new ProgressDialog(MainActivity.this);  
  78.                 pd2.setMax(MAXVALUE);  
  79.                 pd2.setTitle("文件读取中");  
  80.                 pd2.setMessage("文件加载中,请稍后...");  
  81.                 //这里设置为不可以通过按取消按钮关闭进度条  
  82.                 pd2.setCancelable(false);  
  83.                 pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  84.                 //这里设置的是是否显示进度,设为false才是显示的哦!  
  85.                 pd2.setIndeterminate(false);  
  86.                 pd2.show();  
  87.                 //这里的话新建一个线程,重写run()方法,  
  88.                 new Thread()  
  89.                 {  
  90.                     public void run()   
  91.                     {  
  92.                         while(progressStart < MAXVALUE)  
  93.                         {  
  94.                             //这里的算法是决定进度条变化的,可以按需要写  
  95.                             progressStart = 2 * usetime() ;  
  96.                             //把信息码发送给handle让更新界面  
  97.                             hand.sendEmptyMessage(123);  
  98.                         }  
  99.                     }  
  100.                 }.start();  
  101.             }  
  102.               
  103.             //这里设置一个耗时的方法:  
  104.             private int usetime() {  
  105.                 add++;  
  106.                 try{  
  107.                     Thread.sleep(100);  
  108.                 }catch (InterruptedException e) {  
  109.                     e.printStackTrace();  
  110.                 }  
  111.                 return add;  
  112.             };  
  113.         });  
  114.     }  
  115.       
  116. }</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:


代码如下:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <span style="font-family:Comic Sans MS;">public class MainActivity extends Activity {  
  2.   
  3.     private Button btndate;  
  4.     private Button btntime;  
  5.     private String result = "";  
  6.       
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.           
  12.         btndate = (Button) findViewById(R.id.btndate);  
  13.         btntime = (Button) findViewById(R.id.btntime);  
  14.           
  15.         btndate.setOnClickListener(new OnClickListener() {  
  16.               
  17.             @Override  
  18.             public void onClick(View v) {  
  19.                 //这句话是获得当前的系统时间  
  20.                 Calendar cale = Calendar.getInstance();  
  21.                 /*这里的话因为比较麻烦,所有就直接new一个DatePickerDialog对象,构造方法中的参数依次为: 
  22.                 上下文,OnDateSetListener的监听器,整形的年,月,日 
  23.                 */  
  24.                 new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {  
  25.                       
  26.                     @Override  
  27.                     public void onDateSet(DatePicker view, int year, int monthOfYear,  
  28.                             int dayOfMonth) {  
  29.                         result += "你选择的是"+year+"年"+monthOfYear+"月"+dayOfMonth+"日";  
  30.                         Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();  
  31.                     }  
  32.                 }  
  33.                 ,cale.get(Calendar.YEAR)  
  34.                 ,cale.get(Calendar.MONTH)  
  35.                 ,cale.get(Calendar.DAY_OF_MONTH)).show();  
  36.             }  
  37.         });  
  38.           
  39.         btntime.setOnClickListener(new OnClickListener() {  
  40.               
  41.             @Override  
  42.             public void onClick(View v) {  
  43.                 Calendar cale = Calendar.getInstance();  
  44.                 new TimePickerDialog(MainActivity.thisnew TimePickerDialog.OnTimeSetListener() {  
  45.                       
  46.                     @Override  
  47.                     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  
  48.                         result = "";  
  49.                         result += "您选择的时间是:"+hourOfDay+"时"+minute+"分";  
  50.                         Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();  
  51.                     }  
  52.                 }, cale.get(Calendar.HOUR_OF_DAY), cale.get(Calendar.MINUTE), true).show();  
  53.             }  
  54.         });  
  55.           
  56.     }  
  57. }</span>  

运行截图:





代码解释:

1.Calendar c = Calendar.getInstance()获取当前的系统时间

2.Calendar.YEAR / MONTH / DAY_OF_MONTH / HOUR_OF_DAY / MINUTE   依次为:年,月,日,时,分


源码下载:

http://pan.baidu.com/s/1ziFFk




0 0