Android 自定义日期和时间和星期的弹窗
2016-01-04 23:45
771 查看
public class MainActivity extends Activity implements OnClickListener { // 文本日期 private TextView tvEndDate; private TextView tvEndTime; private Button button1; private Button button2; private Intent localIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_time_picker); tvEndDate = (TextView) findViewById(R.id.lv_publish_end_date_tv); tvEndTime = (TextView) findViewById(R.id.lv_publish_end_time_tv); initDataAndTime(tvEndDate, tvEndTime); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(this); button2.setOnClickListener(this); } /** * 初始化日期和时间 (定位时间到每周周五) * * @param paramTextView1 * @param paramTextView2 */ public void initDataAndTime(TextView paramTextView1, TextView paramTextView2) { Calendar localCalendar1 = Calendar.getInstance(); int i = localCalendar1.get(1); int j = localCalendar1.get(2); int k = localCalendar1.get(5); int m = -1 + (7 + localCalendar1.get(5) - localCalendar1.get(7)); int n = localCalendar1.get(11); if (((k == m) && (n >= 18)) || (k > m)) { m = -1 + (14 + localCalendar1.get(5) - localCalendar1.get(7)); } if (m > DateTimeUtility.getDaysOfCurrentMonth()) { if (j + 1 >= 12) { i++; } Calendar localCalendar2 = DateTimeUtility .convertDateToCalendar(DateTimeUtility.covertStringToDate(i + "-" + (j + 1) + "-" + m + " " + 18 + ":00", "yyyy-MM-dd HH:mm")); j = localCalendar2.get(2); m = localCalendar2.get(5); } paramTextView1.setText(i + "-" + (j + 1) + "-" + m); paramTextView2.setText(18 + ":" + "00"); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: localIntent = new Intent(this, DateTimePickerActivity.class); localIntent.putExtra("date", tvEndDate.getText().toString() + " "+ tvEndTime.getText().toString()); localIntent.putExtra("time", false); startActivityForResult(localIntent, 1003); break; case R.id.button2: localIntent = new Intent(this, DateTimePickerActivity.class); localIntent.putExtra("date", tvEndDate.getText().toString() + " "+ tvEndTime.getText().toString()); localIntent.putExtra("time", true); startActivityForResult(localIntent, 1003); break; default: break; } } /** * 返回的结果 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); int k; if (resultCode == -1) { if (requestCode != 1003) { return; } k = data.getIntExtra("isTime", 0); if (k == 2) { String endDate = data.getStringExtra("Day"); tvEndDate.setText(endDate); } if (k == 1) { String endTime = data.getStringExtra("Times"); tvEndTime.setText(endTime); } } } }
public class DateTimePickerActivity extends Activity implements OnClickListener { protected String className = this.getClass().getName(); private static final int theEndOfTheDay = 18; private static final int theNoonOfTheDay = 12; private Calendar calendar; private DatePicker datePicker; private int day; private int hourOfDay; private boolean isTime; private int minute; private int month; private TimePicker timePicker; private String[] weekDays; private int year; String str; // ---------------------------------------------- private Button timeMakeSure; private Button timeNoon; private Button timeAfterNoon; private NumberPicker npTimeWeek; // ----------------------------------------------- private Button dateMakeSure; private Button today; private Button tomorrow; private Button thisWeek; private NumberPicker npDateWeek; private String[] arrayOfStrings; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); initEvent(); } private void initView() { showAsPopup(this); this.isTime = getIntent().getBooleanExtra("time", false); System.out.println("时间" + isTime); if (this.isTime) { System.out.println("如何不是时间-------"); findViewById(R.id.day_group).setVisibility(View.VISIBLE); findViewById(R.id.time_group).setVisibility(View.GONE); } this.weekDays = getResources().getStringArray(R.array.week_day); this.npDateWeek = (NumberPicker) findViewById(R.id.np_date_week); this.npDateWeek.setMinValue(0); this.npDateWeek.setMaxValue(0); this.npDateWeek.setDisplayedValues(null); this.npTimeWeek = (NumberPicker) findViewById(R.id.np_time_week); this.npTimeWeek.setMinValue(0); this.npTimeWeek.setMaxValue(0); this.npTimeWeek.setDisplayedValues(null); this.datePicker = ((DatePicker) findViewById(R.id.date_pick)); this.timePicker = ((TimePicker) findViewById(R.id.time_pick)); timeMakeSure = (Button) findViewById(R.id.pick_time_make_sure); timeNoon = (Button) findViewById(R.id.time_noon); timeAfterNoon = (Button) findViewById(R.id.time_afternoon); // npTimeWeek = (NumberPicker) findViewById(R.id.np_time_week); // -------------------------------------------------------------- dateMakeSure = (Button) findViewById(R.id.pick_date_make_sure); today = (Button) findViewById(R.id.today); tomorrow = (Button) findViewById(R.id.tomorrow); thisWeek = (Button) findViewById(R.id.this_week); /** * 关闭可编辑模式 */ npTimeWeek .setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS); npDateWeek .setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); datePicker .setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); timePicker .setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); } protected void initData() { str = getIntent().getStringExtra("date"); System.out.println("得到的时间为:" + str + className); if (!TextUtils.isEmpty(str)) { initDateWeek(str); deteAndTimePickerChange(); } } protected void initEvent() { try { /** * 通过反射获取到日期 */ Class localClass = this.datePicker.getClass(); Class[] arrayOfClass = new Class[1]; arrayOfClass[0] = Boolean.TYPE; @SuppressWarnings("unchecked") Method localMethod = localClass.getMethod("setCalendarViewShown",arrayOfClass); DatePicker localDatePicker = this.datePicker; Object[] arrayOfObject = new Object[1]; arrayOfObject[0] = Boolean.valueOf(false); localMethod.invoke(localDatePicker, arrayOfObject); if (this.isTime) { this.timePicker.setVisibility(View.VISIBLE); this.datePicker.setVisibility(View.GONE); timeMakeSure.setOnClickListener(this); timeNoon.setOnClickListener(this); timeAfterNoon.setOnClickListener(this); findViewById(R.id.day_group).setVisibility(View.GONE); findViewById(R.id.time_group).setVisibility(View.VISIBLE); this.calendar = DateTimeUtility .convertDateToCalendar(DateTimeUtility .covertStringToDate(str, "yyyy-MM-dd HH:mm")); } else { dateMakeSure.setOnClickListener(this); today.setOnClickListener(this); tomorrow.setOnClickListener(this); thisWeek.setOnClickListener(this); } } catch (Exception localException) { // this.timePicker.setVisibility(View.VISIBLE); this.datePicker.setVisibility(View.GONE); } } /** * 设置星期几 */ private void setWeekDate() { try { this.calendar = DateTimeUtility .convertDateToCalendar(DateTimeUtility.covertStringToDate( this.year + "-" + (1 + this.month) + "-" + this.day + " " + this.hourOfDay + ":00", "yyyy-MM-dd HH:mm")); int i = this.calendar.get(7); NumberPicker localNumberPicker = this.npDateWeek; arrayOfStrings = new String[1]; arrayOfStrings[0] = this.weekDays[(i - 1)]; localNumberPicker.setDisplayedValues(arrayOfStrings); System.out.println(arrayOfStrings[0] + className + "设置星期几的方法----"); } catch (Exception localException) { localException.printStackTrace(); } } /** * 显示popWindow * * @param paramActivity */ public static void showAsPopup(Activity paramActivity) { paramActivity.getWindow().setFlags(2, 2); WindowManager.LayoutParams localLayoutParams = paramActivity .getWindow().getAttributes(); localLayoutParams.height = -1; localLayoutParams.width = -1; localLayoutParams.alpha = 1.0F; localLayoutParams.dimAmount = 0.5F; paramActivity.getWindow().setAttributes(localLayoutParams); paramActivity.setContentView(R.layout.picker_date_time); } /** * 日期和时间改变时的方法 */ private void deteAndTimePickerChange() { this.datePicker.init(this.year, this.month, this.day, new DatePicker.OnDateChangedListener() { public void onDateChanged(DatePicker view, int years, int monthOfYear, int dayOfMonth) { year = years; month = monthOfYear; day = dayOfMonth; System.out.println(years + "-" + monthOfYear + "-" + dayOfMonth + "deteAndTimePickerChange调用了。。。"); DateTimePickerActivity.this.setWeekDate(); } }); this.timePicker.setIs24HourView(Boolean.valueOf(true)); this.timePicker.setCurrentHour(Integer.valueOf(this.hourOfDay)); this.timePicker.setCurrentMinute(Integer.valueOf(this.minute)); this.timePicker .setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { public void onTimeChanged(TimePicker view, int hourOfDays, int minutes) { hourOfDay = hourOfDays; minute = minutes; System.out.println(hourOfDay + ":" + minute + "setOnTimeChangedListener调用了。。。"); } }); if (Build.VERSION.SDK_INT < 11) { } } /** * 时间按钮确定的点击事件 */ private void makeSureTimeOnClick() { Intent localIntent = new Intent(); StringBuilder localStringBuilder = new StringBuilder() .append(hourOfDay).append(":"); System.out.println(localStringBuilder.toString() + className); if (minute < 10) { String localObject = "0" + minute; localStringBuilder.append(localObject); localIntent.putExtra("Times", localStringBuilder.toString()); } // System.out.println(className + "------点击确定后输出的日期为------" + year + // "-"+ (1 + month) + "-" + day); localIntent.putExtra("isTime", 1); setResult(-1, localIntent); finish(); } /** * 确定点击时的响应 */ private void makeSureDateOnClick() { Intent localIntent = new Intent(); localIntent.putExtra("Day", year + "-" + (1 + month) + "-" + day); System.out.println(className + "------点击确定后输出的日期为------" + year + "-" + (1 + month) + "-" + day); localIntent.putExtra("isTime", 2); setResult(-1, localIntent); finish(); } /** * 本周按钮被点击 */ private void thisWeekButtonClick() { Calendar localCalendar1 = Calendar.getInstance(); int i = localCalendar1.get(1); int j = localCalendar1.get(2); int k = -1 + (7 + localCalendar1.get(5) - localCalendar1.get(7)); int m = localCalendar1.get(11); int n = localCalendar1.get(5); if (((n == k) && (m >= 18)) || (n > k)) { k = -1 + (14 + localCalendar1.get(5) - localCalendar1.get(7)); } if (k > DateTimeUtility.getDaysOfCurrentMonth()) { if (j + 1 >= 12) { i++; } Calendar localCalendar2 = DateTimeUtility .convertDateToCalendar(DateTimeUtility.covertStringToDate(i + "-" + (j + 1) + "-" + k + " " + 18 + ":00", "yyyy-MM-dd HH:mm")); j = localCalendar2.get(2); k = localCalendar2.get(5); } datePicker.updateDate(i, j, k); } /** * 明天按钮的点击 */ private void tomorrowButtonClick() { Calendar localCalendar1 = Calendar.getInstance(); int i = localCalendar1.get(1); int j = localCalendar1.get(2); int k = 1 + localCalendar1.get(5); if (k > DateTimeUtility.getDaysOfCurrentMonth()) { if (j + 1 >= 12) { i++; } Calendar localCalendar2 = DateTimeUtility .convertDateToCalendar(DateTimeUtility.covertStringToDate(i + "-" + (j + 1) + "-" + k + " " + 18 + ":00", "yyyy-MM-dd HH:mm")); j = localCalendar2.get(2); k = localCalendar2.get(5); } datePicker.updateDate(i, j, k); } /** * 今天按钮被点击 */ private void todayButtonClick() { Calendar localCalendar = Calendar.getInstance(); int i = localCalendar.get(1); int j = localCalendar.get(2); int k = localCalendar.get(5); datePicker.updateDate(i, j, k); } /** * 下班按钮被点击 */ private void timeAfterNoonClick() { Calendar localCalendar = Calendar.getInstance(); localCalendar.get(1); localCalendar.get(2); localCalendar.get(5); timePicker.setCurrentHour(Integer.valueOf(18)); timePicker.setCurrentMinute(Integer.valueOf(0)); } /** * 中午按钮被点击 */ private void timeNoonClick() { Calendar localCalendar = Calendar.getInstance(); localCalendar.get(1); localCalendar.get(2); localCalendar.get(5); timePicker.setCurrentHour(Integer.valueOf(12)); timePicker.setCurrentMinute(Integer.valueOf(0)); } /** * 初始化星期几 */ private void initDateWeek(String dateAndTime) { String date = spliteString(dateAndTime, " ", "index", "front"); // 日期 String time = spliteString(dateAndTime, " ", "index", "back"); // 时间 year = Integer.parseInt(spliteString(date, "-", "index", "front")); // 年份 String monthAndDay = spliteString(date, "-", "index", "back"); // 月日 month = Integer.parseInt(spliteString(monthAndDay, "-", "index", "front")) - 1; // 月 day = Integer.parseInt(spliteString(monthAndDay, "-", "index", "back")); // 日 hourOfDay = Integer.parseInt(spliteString(time, ":", "index", "front")); // 时 minute = Integer.parseInt(spliteString(time, ":", "index", "back")); // 分 Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month); cal.set(Calendar.DAY_OF_MONTH, day); int i = cal.get(7); // 设置数字选择器的值 NumberPicker localNumberPicker = this.npDateWeek; String[] arrayOfString = new String[1]; arrayOfString[0] = this.weekDays[(i - 1)]; // System.out.println(arrayOfString[0] + "======初始化星期几的方法======="); localNumberPicker.setDisplayedValues(arrayOfString); npTimeWeek.setDisplayedValues(arrayOfString); } /** * 截取子串 * * @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; } protected void onDestroy() { this.datePicker = null; this.timePicker = null; super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.pick_time_make_sure: makeSureTimeOnClick(); break; case R.id.time_noon: timeNoonClick(); break; case R.id.time_afternoon: timeAfterNoonClick(); break; case R.id.pick_date_make_sure: makeSureDateOnClick(); break; case R.id.today: todayButtonClick(); break; case R.id.tomorrow: tomorrowButtonClick(); break; case R.id.this_week: thisWeekButtonClick(); break; } } }
public class DateTimeUtility { public static final long MILLISECONDS_PER_DAY = 86400000L; public static final long MILLISECONDS_PER_HOUR = 3600000L; public static final long MILLISECONDS_PER_MIN = 60000L; public static final long MILLISECONDS_PER_SECOND = 1000L; private static int _localTimeZoneOffsetInMilliseconds = TimeZone .getDefault().getRawOffset(); private static final String _standardFormat = "yyyy-MM-dd HH:mm:ss"; private static final String _standardFormat_ms = "yyyy-MM-dd HH:mm:ss.SSS"; /** * 转换日期成日历 * * @param paramDate * @return */ public static Calendar convertDateToCalendar(Date paramDate) { Calendar localCalendar = Calendar.getInstance(); localCalendar.setTime(paramDate); return localCalendar; } /** * 转换本地到世界时间 * * @param paramDate * @return */ public static Date convertLocalToUtc(Date paramDate) { return new Date(paramDate.getTime() - _localTimeZoneOffsetInMilliseconds); } /** * 转换字符串成国内日期 * * @param paramString1 * @param paramString2 * @return */ private static Date convertStringToDateInternal(String paramString1, String paramString2) { SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat( paramString2); try { Date localDate = localSimpleDateFormat.parse(paramString1); return localDate; } catch (ParseException localParseException) { } return null; } /** * 转换国际时间成本地 * * @param paramDate * @return */ public static Date convertUtcToLocal(Date paramDate) { return new Date(paramDate.getTime() + _localTimeZoneOffsetInMilliseconds); } public static Date covertStringFromUtcStringDataToGmtDate(String paramString) { return convertUtcToLocal(covertStringToDate(paramString)); } /** * 转换字符串成日期 * * @param paramString * @return */ public static Date covertStringToDate(String paramString) { if (TextUtils.isEmpty(paramString)) { return null; } return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss"); } /** * 转换字符串成日期 * * @param paramString1 * @param paramString2 * @return */ public static Date covertStringToDate(String paramString1, String paramString2) { if (TextUtils.isEmpty(paramString1)) { return null; } return convertStringToDateInternal(paramString1, paramString2); } public static Date covertStringToDateWithMs(String paramString) { int i = paramString.length(); if ((TextUtils.isEmpty(paramString)) && (i <= 4)) { return null; } if (paramString.charAt(i - 4) == '.') { return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss.SSS"); } return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss"); } public static long getDateDiffInDays(Date paramDate1, Date paramDate2) { return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 86400000L; } public static long getDateDiffInHours(Date paramDate1, Date paramDate2) { return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 3600000L; } public static long getDateDiffInMilliSeconds(Date paramDate1, Date paramDate2) { Calendar localCalendar1 = convertDateToCalendar(paramDate1); Calendar localCalendar2 = convertDateToCalendar(paramDate2); return localCalendar1.getTimeInMillis() - localCalendar2.getTimeInMillis(); } public static long getDateDiffInSeconds(Date paramDate1, Date paramDate2) { return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 1000L; } public static String getDateTimeString(Date paramDate) { return getDateTimeString(paramDate, "yyyy-MM-dd HH:mm:ss"); } @SuppressLint("SimpleDateFormat") public static String getDateTimeString(Date paramDate, String paramString) { return new SimpleDateFormat(paramString).format(paramDate); } public static String getDateTimeStringWithMs(Date paramDate) { return getDateTimeString(paramDate, "yyyy-MM-dd HH:mm:ss.SSS"); } public static int getDaysOfCurrentMonth() { Calendar localCalendar = Calendar.getInstance(); localCalendar.set(5, 1); localCalendar.roll(5, -1); return localCalendar.get(5); } public static int getDaysOfYearMonth(int paramInt1, int paramInt2) { Calendar localCalendar = Calendar.getInstance(); localCalendar.set(1, paramInt1); localCalendar.set(2, paramInt2 - 1); localCalendar.set(5, 1); localCalendar.roll(5, -1); return localCalendar.get(5); } }
代码很简单,注释也写得比较清楚,我就不做过多赘述。
代码下载 http://download.csdn.net/detail/developandroid/9390047
相关文章推荐
- ## 第一次使用Android NDK,网上的教程都有些过时,写下来供需要的人参考
- android studio 安装模拟器报错 intel HAXM
- Android之二维码扫描的总结
- Android Studio快捷键每日一练(6)
- Android ADB常用命令
- android colors.xml的用法
- android 给空白包签名
- android studio 安装插件的方法
- 调用 android平台的一些如SMS,浏览器,MMS,TEL等功能
- Android studio的ndk开发
- android.so.Message.java 简析
- Android编程开发规范
- Android 三大图片缓存原理、特性对比
- ScrollView的android:scrollbarStyle属性详解
- android view的学习
- Android Studio导入开源Library错误以及解决方案
- Android 高清加载巨图方案 拒绝压缩图片
- 那些我们解过的bug之关闭应用
- Android学习笔记之动态修改xml中字符资源
- android之旅21 样式、主题