public class DateTimePickDialogUtil implements DatePicker.OnDateChangedListener,
TimePicker.OnTimeChangedListener {
private DatePicker datePicker;
private TimePicker timePicker;
private AlertDialog ad;
private String dateTime;
private String initDateTime;
private Activity activity;
/**
* 日期时间弹出选择框构造函数
*
* @param activity
* :调用的父activity
* @param initDateTime
* 初始日期时间值,作为弹出窗口的标题和日期时间初始值
*/
public DateTimePickDialogUtil(Activity activity, String initDateTime) {
this.activity = activity;
this.initDateTime = initDateTime;
}
public void init(DatePicker datePicker, TimePicker timePicker) {
Calendar calendar = Calendar.getInstance();
if (!(null == initDateTime || "".equals(initDateTime))) {
calendar = this.getCalendarByInintData(initDateTime);
} else {
initDateTime = calendar.get(Calendar.YEAR) + "-"
+ calendar.get(Calendar.MONTH) + "-"
+ calendar.get(Calendar.DAY_OF_MONTH);
}
datePicker.init(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), this);
}
/**
* 弹出日期时间选择框方法
* :为需要设置的日期时间文本编辑框
*展示的布局
*/
public AlertDialog dateTimePicKDialog(final TextView inputDate) {
//TextView inputDate 使用的地方传过来,用来展示时间
LinearLayout dateTimeLayout = (LinearLayout) activity
.getLayoutInflater().inflate(R.layout.common_datetime, null);
datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
init(datePicker, timePicker);
timePicker.setIs24HourView(true);
timePicker.setOnTimeChangedListener(this);
//影藏日历,可能会无效
datePicker.setCalendarViewShown(false);
ad = new AlertDialog.Builder(activity)
.setTitle(initDateTime)
.setView(dateTimeLayout)
.setNegativeButton(activity.getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
datePicker.clearFocus();
onDateChanged(null, 0, 0, 0);
if(inputDate.getText().toString().equals("")){
inputDate.setText("");
}
}
})
.setPositiveButton(activity.getString(R.string.sure), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
datePicker.clearFocus();
onDateChanged(null, 0, 0, 0);
//展示时间
inputDate.setText(dateTime);
}
}).show();
return ad;
}
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
onDateChanged(null, 0, 0, 0);
}
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// 获得日历实例
Calendar calendar = Calendar.getInstance();
calendar.set(datePicker.getYear(), datePicker.getMonth(),
datePicker.getDayOfMonth());
//修改展示日期的格式:yyyy年MM月dd日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
dateTime = sdf.format(calendar.getTime());
ad.setTitle(dateTime);
}
/**
* 实现将初始日期时间2012年07月02日 拆分成2012 07 02,并赋值给calendar
*
* initDateTime 初始日期字符串
*/
private Calendar getCalendarByInintData(String initDateTime) {
Calendar calendar = Calendar.getInstance();
int currentYear = Integer.parseInt(initDateTime.substring(0, 4));
int currentMonth = Integer.parseInt(initDateTime.substring(5, 7)) - 1;
int currentDay = Integer.parseInt(initDateTime.substring(8,
initDateTime.length()-1));
calendar.set(currentYear, currentMonth, currentDay);
return calendar;
}
}
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:startYear="0"
//影藏日历
android:calendarViewShown="false"
//设置主题改变样式
android:theme="@android:style/Theme.Holo.Light"
android:endYear="9999"
/>
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
//滑动型
android:theme="@android:style/Theme.Holo.Light"
//下面连个是按钮型
android:theme="@android:style/Theme.Light.NoTitleBar"
android:theme="@android:style/Theme.Light"
准备好这些之后,开始使用,在需要使用的activity中设置监听
日期时间选择控件 使用方法:
private TextView inputDate;//需要设置的日期时间文本框
private String initDateTime="2012年9月3日 14:44",//初始日期时间值 在点击事件中使用:
inputDate.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
//将展示文本和默认时间传过去
DateTimePickDialogUtil dateTimePicKDialog=new DateTimePickDialogUtil(this,initDateTime);
dateTimePicKDialog.dateTimePicKDialog(inputDate);
} });
OK,完工