Android自定义DataTimePicker 日期选择器

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               
Android自定义DataTimePicker(日期选择器)


 笔者有一段时间没有发表关于Android的文章了,关于Android自定义组件笔者有好几篇想跟大家分享的,后期会记录在博客中。本篇博客给大家分享的是自定义一个日期选择器,可以让用户同时选择年月日和当前时间。

先看看效果:


实现的效果就是在同一个布局上显示日期选择和时间选择。

自定义一个类:
/DateTimePicker/src/com/wwj/datetimepicker/DateTimePickDialogUtil.java
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
package com.wwj.datetimepicker;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;/** * 时间拾取器界面 *  * @author wwj_748 *  */public class DateTimePickerActivity extends Activity /** Called when the activity is first created. */ private EditText startDateTime; private EditText endDateTime; private String initStartDateTime = "2013年9月3日 14:44"; // 初始化开始时间 private String initEndDateTime = "2014年8月23日 17:44"; // 初始化结束时间 @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  // 两个输入框  startDateTime = (EditText) findViewById(R.id.inputDate);  endDateTime = (EditText) findViewById(R.id.inputDate2);  startDateTime.setText(initStartDateTime);  endDateTime.setText(initEndDateTime);  startDateTime.setOnClickListener(new OnClickListener() {   public void onClick(View v) {    DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(      DateTimePickerActivity.this, initEndDateTime);    dateTimePicKDialog.dateTimePicKDialog(startDateTime);   }  });  endDateTime.setOnClickListener(new OnClickListener() {   public void onClick(View v) {    DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(      DateTimePickerActivity.this, initEndDateTime);    dateTimePicKDialog.dateTimePicKDialog(endDateTime);   }  }); }}

自定义界面:
/DateTimePicker/res/layout/common_datetime.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <DatePicker        android:id="@+id/datepicker"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:calendarViewShown="false" />    <TimePicker        android:id="@+id/timepicker"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>



 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述