TimePickerDialog有两个构造函数:
TimePickerDialog(Context context, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) TimePickerDialog(Context context, int theme, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)
第一个参数(Acitivity.this)为弹出的时间对话框所在的activity指针;第二个参数是设置完时间后的回调函数,设置时间的主要工作都在里面的onTimeSet()里完成;第三个参数(hour)和第四个参数(minute)为弹出的时间对话框的初始显示的小时和分钟;第五个参数为设置24时显示参数,true代表时间以24时制显示时间。
至于int theme不知道怎么用,官网也言之不详。
最纠结的地方是TimePickerDialog的样式,网上几乎所有介绍TimePickerDialog使用方法的时候给出的样式都是这幅模样:

可是,实际上使用默认TimePickerDialog弹出的对话框样式却是这样:

只有一个按钮,也就意味着你不想设置时间了也没办法从屏幕上取消;从程序执行方面来说,就是打开对话框就要执行一次onTimeSet(),不能取消。这显然不合理。
想添加一个取消按钮怎么办,定义一个新的show():
@Override
public void show() {
// TODO Auto-generated method stub
this.setButton( BUTTON_NEGATIVE , "Cancel",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
super.show();
}进行到这一步,还没有完,不管你点取消按钮,还是点完成按钮,都会执行onTimeSet()。最可恶的是,点击Done按钮,onTimeSet()会执行两次,完全没有达到预期效果。据说这是android4.1和4.2的一个bug,在 onStop()时,会继续触发onTimeSet()。解决方法依然是覆盖:
@Override
protected void onStop() {
//super.onStop();
}完整的类定义如下:
package com.awer;
import java.util.Calendar;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
public class AwerTimePickerDialog extends TimePickerDialog {
public AwerTimePickerDialog(Context context, OnTimeSetListener callBack,
int hourOfDay, int minute, boolean is24HourView) {
super(context, callBack, hourOfDay, minute, is24HourView);
}
public AwerTimePickerDialog(Context context, OnTimeSetListener callBack, Calendar c ) {
super(context, callBack, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true);
}
@Override
protected void onStop() {
//super.onStop();
}
@Override
public void show() {
// TODO Auto-generated method stub
this.setButton( BUTTON_NEGATIVE , "取消",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
super.show();
}
}在Activity里调用:
c=Calendar.getInstance(); new AwerTimePickerDialog(this,mTimeSetListener, c).show();
留言列表: