当前位置:   article > 正文

Android自定义DataTimePicker(日期选择器)_android的timepicker的自定义布局

android的timepicker的自定义布局
Android自定义DataTimePicker(日期选择器)


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

先看看效果:


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

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

/DateTimePicker/src/com/wwj/datetimepicker/DateTimePickerActivity.java
  1. package com.wwj.datetimepicker;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.widget.EditText;
  7. /**
  8. * 时间拾取器界面
  9. *
  10. * @author wwj_748
  11. *
  12. */
  13. public class DateTimePickerActivity extends Activity {
  14. /** Called when the activity is first created. */
  15. private EditText startDateTime;
  16. private EditText endDateTime;
  17. private String initStartDateTime = "2013年9月3日 14:44"; // 初始化开始时间
  18. private String initEndDateTime = "2014年8月23日 17:44"; // 初始化结束时间
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. // 两个输入框
  24. startDateTime = (EditText) findViewById(R.id.inputDate);
  25. endDateTime = (EditText) findViewById(R.id.inputDate2);
  26. startDateTime.setText(initStartDateTime);
  27. endDateTime.setText(initEndDateTime);
  28. startDateTime.setOnClickListener(new OnClickListener() {
  29. public void onClick(View v) {
  30. DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(
  31. DateTimePickerActivity.this, initEndDateTime);
  32. dateTimePicKDialog.dateTimePicKDialog(startDateTime);
  33. }
  34. });
  35. endDateTime.setOnClickListener(new OnClickListener() {
  36. public void onClick(View v) {
  37. DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil(
  38. DateTimePickerActivity.this, initEndDateTime);
  39. dateTimePicKDialog.dateTimePicKDialog(endDateTime);
  40. }
  41. });
  42. }
  43. }

自定义界面:
/DateTimePicker/res/layout/common_datetime.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. <DatePicker
  7. android:id="@+id/datepicker"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:calendarViewShown="false" />
  11. <TimePicker
  12. android:id="@+id/timepicker"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content" />
  15. </LinearLayout>




本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/920717
推荐阅读
相关标签
  

闽ICP备14008679号