写点什么

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

用户头像
Android架构
关注
发布于: 17 小时前

OnTimeChangedListener {


private DatePicker datePicker;


private TimePicker timePicker;


private AlertDialog ad;


private String dateTime;


private String initDateTime;


private Activity activity;


/**


  • 日期时间弹出选择框构造函数

  • @param 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 {


i


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


f (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);


}


});

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android自定义DataTimePicker(日期选择器)