在Android系统中,有各式各样的菜单和对话框,这些是如何来使用的呢?下面,我们将一一讲解
首先,讲述下用的比较多的时间日期选择器,如图1
图 1
在Android系统中,显示对话框统一用一个方法
showDialog(int id);
id标识了我们要显示哪种类型的对话框,为此,我们定义一个显示日期对话框的ID
private static final int DIALOG_DATEPICKER = 1;
然后覆盖Activity的protected Dialog onCreateDialog(int id)方法,判断id,来决定显示哪一种对话框
Calendar calendar = Calendar.getInstance();
switch (id) {
return new DatePickerDialog(this,id, new OnDateSetListener(){
public void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
}, calendar.get(Calendar.YEAR), Calendar.MONTH, Calendar.DAY_OF_MONTH);
default:
return null;
}
这里
new DatePickerDialog(this,id, new OnDateSetListener()...);用来创建一个日期对话框,并且第三个参数为一个实现了OnDateSetListener的匿名内部类,其中的回调方法将在用户点击"set"之后调用,而最后三个参数规定时间选择器上的默认时间是现在。
第二个要讲述的是提升对话框,如下图2
图 2
原理与日期选择对话框类似,第一步,定义一个显示该对话框的ID
private final static int WELCOME = 2;
然后在
protected Dialog onCreateDialog(int id)
判断在id为WELCOME 时应该创建的对话框
switch(id){
case WELCOME:
return new AlertDialog.Builder(MainActivity.this).setIcon(R.drawable.find).
default:
return null;
}
很简单,只要对照图2和上列代码对比下即可,这里不再赘述!
最后要讲述的是进度条对话框,我们的应用有的时候在处理一些事情的时候,用的时间比较长,这里就需要在前台给用户一个展示,以说明我们的这一步进行到什么样的程度了,进度条是最好的方式,如图3
图 3
我们模拟了一个处理事件的过程,每过100毫秒,进度条增加1
首先,与以上两种Dialog类似,必须定义一个ID
private static final int DIALOG_PROGRESS = 3;
然后在创建对话框的时候根据该ID来创建相应的对话框
switch (id) {
case DIALOG_PROGRESS:
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置格式为水平
progressDialog.setMax(100);
progressDialog.setProgress(0);
return progressDialog;
default:
return null;
}
下面先简要讲述下什么是Android中的Handler(关于Handle将单独列出一小节讲述)
Handler主要是用来跟UI主线程交互用。 比如:
1、你用handler发送一个message,然后在handler的线程中来接收、处理该消息,以避免直接在UI主线程中处理事务导致影响UI主线程的其他处理工作。
2、你可以将handler对象传给其他进程,以便在其他进程中通过handler给你发送事件。
3、通过handler的延时发送message,可以延时处理一些事务的处理
最后,想要使得进度条对话框根据什么来改变位置,我们创建一个Handler对象,然后在handleMessage方法中实现对进度条位置的改变
private static final int MSG_PROGRESS = 11;
Handler pHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case MSG_PROGRESS:
if(progressDialog.getProgress()>=MAXPROGRESS){
}else{
progressDialog.incrementProgressBy(1);
pHandler.sendEmptyMessageDelayed(MSG_PROGRESS, 100);
}//设置延迟时间
break;
}
}
};
showDialog(DIALOG_PROGRESS);//显示进度条对话框
pHandler.sendEmptyMessage(MSG_PROGRESS);//表示是MSG_PROGRESS消息,这一句之后将循环调用handleMessage方法实现进度条的增加
至此,三个Dialog简要介绍完毕!