读书人

Android学习笔记:设置日期和时间不能

发布时间: 2012-09-13 09:51:53 作者: rapoo

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决办法升级版

自从写了上篇博客之后,总觉的太烦琐,太麻烦,而且容易报错和不容易维护,而且是从外部的角度来考虑,不是通过组件本身的角度,总之经过再三的考虑之后,还是决定改一下,精简和优化一下。

1,首先一进来,便是两个简单的TextView,然后日期和时间,时间是我乱写的,日期是今天的。

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决方法升级版

2,当我点击日期的TextView的时候会弹出一个对话框,DatePickerDialog,因为今天是8月14,当我点击“-”号的时候,“-”号和中间显示数字的组件都被置成了不可按的状态,强迫用户不去选以前的日子,只能选择以后的日子。

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决方法升级版

3,当日期选择之后,点击时间的TextView,然后会弹出一个时间的对话框,TimePickerDialog,当我选择以前的时间,显示和TimePicker都会被初始化为当前时间

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决方法升级版

4,可以看到3中选择了15:02,因为时间过期,所以TextView和TimePicker都会被初始化为当前时间。

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决方法升级版

5,如果是不过期的时间,即将来的时间,则不会初始化。

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决方法升级版

6,如果日期是今天之后的日子,那么时间不论怎么设置都行。

Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决方法升级版


在这里重写了DatePickerDialog:



想了很久,也不知道原因,于是就打算不重写TimePickerDialog,效果看起来虽然没有日期的效果那么来的直观,但是比前面的已经要好多了。

下面看看主类的调用:

hello.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubDatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {// TODO Auto-generated method stubyear1 = year;month1 = monthOfYear;day1 = dayOfMonth;updateDisplay1();flag = isNowDate(year1,month1,day1);    //备注2}};new MyDatePicker(MainActivity.this, listener, year1, month1, day1, 2).show();}});world.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {OnTimeSetListener listener = new OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {boolean isSetTime = isNowTime(flag, hourOfDay, minute);    //备注3if(view != null){if(!isSetTime){((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false);((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(1)).getChildAt(2).setEnabled(false);((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(0)).getChildAt(1).setEnabled(false);((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(1)).getChildAt(1).setEnabled(false);initTimePicker(view, new Date().getHours(), new Date().getMinutes());//time1.onTimeChanged(view, hourOfDay, minute);updateDisplay2(new Date().getHours(), new Date().getMinutes());}else{((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(true);((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(1)).getChildAt(2).setEnabled(true);((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(0)).getChildAt(1).setEnabled(true);((ViewGroup) ((ViewGroup) view.getChildAt(0)).getChildAt(1)).getChildAt(1).setEnabled(true);updateDisplay2(hourOfDay,minute);}}}};time1 = new TimePickerDialog(MainActivity.this,listener , Integer.parseInt(world.getText().toString().split(":")[0].trim()), Integer.parseInt(world.getText().toString().split(":")[1].trim()), true);time1.show();}});}
备注2:这里是根据设置的日期和当前的日期进行比较得到一个boolean值,来决定对时间要不要进行限制

备注3:这里是根据设置时间和当前时间进行比较得到一个boolean值,来决定如何初始化时间组件


Demo下载:http://download.csdn.net/detail/duancanmeng/4499365

读书人网 >Android

热点推荐