1. 程式人生 > >Android自定義DataTimePicker 日期選擇器

Android自定義DataTimePicker 日期選擇器

package com.wwj.datetimepicker;import java.text.SimpleDateFormat;import java.util.Calendar;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.widget.DatePicker;import android.widget.DatePicker.OnDateChangedListener;import android.widget.EditText;import
android.widget.LinearLayout;import android.widget.TimePicker;import android.widget.TimePicker.OnTimeChangedListener;/** * 日期時間選擇控制元件 使用方法: private EditText inputDate;//需要設定的日期時間文字編輯框 private String * initDateTime="2012年9月3日 14:44",//初始日期時間值 在點選事件中使用: * inputDate.setOnClickListener(new OnClickListener() { *  * @Override
public void onClick(View v) { DateTimePickDialogUtil *           dateTimePicKDialog=new *           DateTimePickDialogUtil(SinvestigateActivity.this,initDateTime); *           dateTimePicKDialog.dateTimePicKDialog(inputDate); *  *           } }); *  * @author */
public class DateTimePickDialogUtil implements
OnDateChangedListener,  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) + "日 "     + calendar.get(Calendar.HOUR_OF_DAY) + ":"     + calendar.get(Calendar.MINUTE);  }  datePicker.init(calendar.get(Calendar.YEAR),    calendar.get(Calendar.MONTH),    calendar.get(Calendar.DAY_OF_MONTH), this);  timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));  timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); } /**  * 彈出日期時間選擇框方法  *   * @param inputDate  *            :為需要設定的日期時間文字編輯框  * @return  */ public AlertDialog dateTimePicKDialog(final EditText 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);  ad = new AlertDialog.Builder(activity)    .setTitle(initDateTime)    .setView(dateTimeLayout)    .setPositiveButton("設定", new DialogInterface.OnClickListener() {     public void onClick(DialogInterface dialog, int whichButton) {      inputDate.setText(dateTime);     }    })    .setNegativeButton("取消", new DialogInterface.OnClickListener() {     public void onClick(DialogInterface dialog, int whichButton) {      inputDate.setText("");     }    }).show();  onDateChanged(null, 0, 0, 0);  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(), timePicker.getCurrentHour(),    timePicker.getCurrentMinute());  SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");  dateTime = sdf.format(calendar.getTime());  ad.setTitle(dateTime); } /**  * 實現將初始日期時間2012年07月02日 16:45 拆分成年 月 日 時 分 秒,並賦值給calendar  *   * @param initDateTime  *            初始日期時間值 字串型  * @return Calendar  */ private Calendar getCalendarByInintData(String initDateTime) {  Calendar calendar = Calendar.getInstance();  // 將初始日期時間2012年07月02日 16:45 拆分成年 月 日 時 分 秒  String date = spliteString(initDateTime, "日", "index", "front"); // 日期  String time = spliteString(initDateTime, "日", "index", "back"); // 時間  String yearStr = spliteString(date, "年", "index", "front"); // 年份  String monthAndDay = spliteString(date, "年", "index", "back"); // 月日  String monthStr = spliteString(monthAndDay, "月", "index", "front"); // 月  String dayStr = spliteString(monthAndDay, "月", "index", "back"); // 日  String hourStr = spliteString(time, ":", "index", "front"); // 時  String minuteStr = spliteString(time, ":", "index", "back"); // 分  int currentYear = Integer.valueOf(yearStr.trim()).intValue();  int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;  int currentDay = Integer.valueOf(dayStr.trim()).intValue();  int currentHour = Integer.valueOf(hourStr.trim()).intValue();  int currentMinute = Integer.valueOf(minuteStr.trim()).intValue();  calendar.set(currentYear, currentMonth, currentDay, currentHour,    currentMinute);  return calendar; } /**  * 擷取子串  *   * @param srcStr  *            源串  * @param pattern  *            匹配模式  * @param indexOrLast  * @param frontOrBack  * @return  */ public static String spliteString(String srcStr, String pattern,   String indexOrLast, String frontOrBack) {  String result = "";  int loc = -1;  if (indexOrLast.equalsIgnoreCase("index")) {   loc = srcStr.indexOf(pattern); // 取得字串第一次出現的位置  } else {   loc = srcStr.lastIndexOf(pattern); // 最後一個匹配串的位置  }  if (frontOrBack.equalsIgnoreCase("front")) {   if (loc != -1)    result = srcStr.substring(0, loc); // 擷取子串  } else {   if (loc != -1)    result = srcStr.substring(loc + 1, srcStr.length()); // 擷取子串  }  return result; }}
/DateTimePicker/src/com/wwj/datetimepicker/DateTimePickerActivity.java