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();
留言列表: