DatePicker和TimePicker的用法——弹出窗
xml布局:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <DatePicker 8 android:id="@+id/datepicker" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:calendarViewShown="false" /> 12 13 <TimePicker 14 android:id="@+id/timepicker" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" /> 17 18 </LinearLayout>
Java代码:
自定义弹出框:
1 public class DateTimePickDialogUtil implements OnDateChangedListener, 2 OnTimeChangedListener { 3 private DatePicker datePicker; 4 private TimePicker timePicker; 5 private AlertDialog ad; 6 private String dateTime; 7 private String initDateTime; 8 private Activity activity; 9 10 /** 11 * 日期时间弹出选择框构造函数 12 * 13 * @param activity 14 * :调用的父activity 15 * @param initDateTime 16 * 初始日期时间值,作为弹出窗口的标题和日期时间初始值 17 */ 18 public DateTimePickDialogUtil(Activity activity, String initDateTime) { 19 this.activity = activity; 20 this.initDateTime = initDateTime; 21 22 } 23 24 public void init(DatePicker datePicker, TimePicker timePicker) { 25 Calendar calendar = Calendar.getInstance(); 26 if (!(null == initDateTime || "".equals(initDateTime))) { 27 calendar = this.getCalendarByInintData(initDateTime); 28 } else { 29 initDateTime = calendar.get(Calendar.YEAR) + "年" 30 + calendar.get(Calendar.MONTH) + "月" 31 + calendar.get(Calendar.DAY_OF_MONTH) + "日 " 32 + calendar.get(Calendar.HOUR_OF_DAY) + ":" 33 + calendar.get(Calendar.MINUTE); 34 } 35 36 datePicker.init(calendar.get(Calendar.YEAR), 37 calendar.get(Calendar.MONTH), 38 calendar.get(Calendar.DAY_OF_MONTH), this); 39 timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); 40 timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); 41 } 42 43 /** 44 * 弹出日期时间选择框方法 45 * 46 * @param inputDate 47 * :为需要设置的日期时间文本编辑框 48 * @return 49 */ 50 public AlertDialog dateTimePicKDialog(final EditText inputDate) { 51 LinearLayout dateTimeLayout = (LinearLayout) activity 52 .getLayoutInflater().inflate(R.layout.common_datetime, null); 53 datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker); 54 timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker); 55 init(datePicker, timePicker); 56 timePicker.setIs24HourView(true); 57 timePicker.setOnTimeChangedListener(this); 58 59 ad = new AlertDialog.Builder(activity) 60 .setTitle(initDateTime) 61 .setView(dateTimeLayout) 62 .setPositiveButton("设置", new DialogInterface.OnClickListener() { 63 public void onClick(DialogInterface dialog, int whichButton) { 64 inputDate.setText(dateTime); 65 } 66 }) 67 .setNegativeButton("取消", new DialogInterface.OnClickListener() { 68 public void onClick(DialogInterface dialog, int whichButton) { 69 inputDate.setText(""); 70 } 71 }).show(); 72 73 onDateChanged(null, 0, 0, 0); 74 return ad; 75 } 76 77 public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 78 onDateChanged(null, 0, 0, 0); 79 } 80 81 public void onDateChanged(DatePicker view, int year, int monthOfYear, 82 int dayOfMonth) { 83 // 获得日历实例 84 Calendar calendar = Calendar.getInstance(); 85 86 calendar.set(datePicker.getYear(), datePicker.getMonth(), 87 datePicker.getDayOfMonth(), timePicker.getCurrentHour(), 88 timePicker.getCurrentMinute()); 89 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); 90 91 dateTime = sdf.format(calendar.getTime()); 92 ad.setTitle(dateTime); 93 } 94 95 /** 96 * 实现将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒,并赋值给calendar 97 * 98 * @param initDateTime 99 * 初始日期时间值 字符串型 100 * @return Calendar 101 */ 102 private Calendar getCalendarByInintData(String initDateTime) { 103 Calendar calendar = Calendar.getInstance(); 104 105 // 将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒 106 String date = spliteString(initDateTime, "日", "index", "front"); // 日期 107 String time = spliteString(initDateTime, "日", "index", "back"); // 时间 108 109 String yearStr = spliteString(date, "年", "index", "front"); // 年份 110 String monthAndDay = spliteString(date, "年", "index", "back"); // 月日 111 112 String monthStr = spliteString(monthAndDay, "月", "index", "front"); // 月 113 String dayStr = spliteString(monthAndDay, "月", "index", "back"); // 日 114 115 String hourStr = spliteString(time, ":", "index", "front"); // 时 116 String minuteStr = spliteString(time, ":", "index", "back"); // 分 117 118 int currentYear = Integer.valueOf(yearStr.trim()).intValue(); 119 int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1; 120 int currentDay = Integer.valueOf(dayStr.trim()).intValue(); 121 int currentHour = Integer.valueOf(hourStr.trim()).intValue(); 122 int currentMinute = Integer.valueOf(minuteStr.trim()).intValue(); 123 124 calendar.set(currentYear, currentMonth, currentDay, currentHour, 125 currentMinute); 126 return calendar; 127 } 128 129 /** 130 * 截取子串 131 * 132 * @param srcStr 133 * 源串 134 * @param pattern 135 * 匹配模式 136 * @param indexOrLast 137 * @param frontOrBack 138 * @return 139 */ 140 public static String spliteString(String srcStr, String pattern, 141 String indexOrLast, String frontOrBack) { 142 String result = ""; 143 int loc = -1; 144 if (indexOrLast.equalsIgnoreCase("index")) { 145 loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置 146 } else { 147 loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置 148 } 149 if (frontOrBack.equalsIgnoreCase("front")) { 150 if (loc != -1) 151 result = srcStr.substring(0, loc); // 截取子串 152 } else { 153 if (loc != -1) 154 result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串 155 } 156 return result; 157 } 158 159 }
主界面添加事件:
1 public class DateTimePickerActivity extends Activity { 2 /** Called when the activity is first created. */ 3 private EditText DateTime; 4 5 6 private String initDateTime = "2013年9月3日 14:44"; // 初始化开始时间 7 8 9 @Override 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 14 DateTime = (EditText) findViewById(R.id.inputDate); 15 16 17 DateTime.setText(initDateTime); 18 19 DateTime.setOnClickListener(new OnClickListener() { 20 public void onClick(View v) { 21 22 DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil( 23 DateTimePickerActivity.this, initDateTime); 24 dateTimePicKDialog.dateTimePicKDialog(DateTime); 25 26 } 27 }); 28 29 } 30 }
效果图: