Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决办法
来源:互联网 发布:阿里云 api市场 编辑:程序博客网 时间:2024/05/21 08:00
根据业务需求,需要实现如题的功能,细想一下,其中包含很多细节,如下:
1,如果设置年大于当前的年,那么月,日,时间可以随便设置;
2,如果设置年小于当前的年,那么则设置不能成功;
3,如果设置年等于当前的年,那么如果设置月大于当前的月,那么日,时间可以随便设置;
4,如果设置年等于当前的年,那么如果设置月小于当前的月,那么则设置不能成功;
5,如果设置年等于当前的年,那么如果设置月等于当前的月,那么如果设置日大于当前的日,则时间可以随便设置;
。。。。。。
等等
在android中,关于日期和时间,我们首先想到的便是DatePicker和TimePicker两个组件,接下来便是实现方式的问题,该如何实现呢?我本来设想的是用DatePickerDialog和TimePickerDialog,然后通过判断来决定DatePicker中的按钮是否可按,比如,设置年的值如果要小于当前的年的时候,则DatePicker中的“-”按钮则是不可按的。这种方式实现起来比较的麻烦,而且源码里面有些东西也没看懂,就自己做了个类似DatePickerDialog的组件,如下图:
今日是6号,“-”按钮是没有反映的,点击一下则变成了灰色,按照上面的业务一步一步的分析,则可以实现,不难,但是很烦琐特别是布局,最讨厌的就是调整布局,所以就把这些逻辑还是放到原有的DatePicker上来实现。当然实现的界面可能就没有这么直观了。
1 2
3 4
5 6
7
可能感觉有点坑爹,但是还是将就吧。
看看关键的代码:
@Overrideprotected Dialog onCreateDialog(int id) {Dialog dialog = null;switch (id) {case R.id.wait_edit_yuyuedata: DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker,int year, int month, int dayOfMonth) { Log.i(TAG,"onDateSet----------->year:"+year+",month:"+(month+1)+",day:"+dayOfMonth); if(year>getYear()){//设置年大于当前年,直接设置,不用判断下面的 wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year); flag = 1; }else if(year == getYear()){//设置年等于当前年,则向下开始判断月 if((month+1) > getMonth()){//设置月等于当前月,直接设置,不用判断下面的 flag = 1; wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year); }else if((month+1) == getMonth()){//设置月等于当前月,则向下开始判断日 if(dayOfMonth > getDay()){//设置日大于当前月,直接设置,不用判断下面的 flag = 1; wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year); }else if(dayOfMonth == getDay()){//设置日等于当前日,则向下开始判断时 flag = 2; wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year); }else{//设置日小于当前日,提示重新设置 flag = 3; Toast.makeText(MainActivity.this, "当前日不能小于今日,请重新设置", 2000).show(); } }else{//设置月小于当前月,提示重新设置 flag = 3; Toast.makeText(MainActivity.this, "当前月不能小于今月,请重新设置", 2000).show(); } }else{//设置年小于当前年,提示重新设置 flag = 3; Toast.makeText(MainActivity.this, "当前年不能小于今年,请重新设置", 2000).show(); } if(flag == 3){ datePicker.init(getYear(), (getMonth()-1), getDay(), new DatePicker.OnDateChangedListener() {@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {wait_edit_yuyuedata.setText(dayOfMonth + "/"+(monthOfYear+1)+"/"+year);}}); } } }; dialog = new DatePickerDialog(this, dateListener, getYear(), (getMonth()-1), getDay()); break;case R.id.wait_edit_arriveltime:TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Log.i(TAG,"onTimeSet----------->flag:"+flag+",hourOfDay:"+hourOfDay+",minute:"+minute);switch (flag) {case 1://设置日期在当前日期之后,直接设置时间,不用判断wait_edit_arriveltime.setText(hourOfDay+":"+minute);break;case 2://设置日期等于当前日期之后,判断时和分if(hourOfDay>getHonor()){wait_edit_arriveltime.setText(hourOfDay+":"+minute);}else if(hourOfDay == getHonor()){if(minute>getMin()){wait_edit_arriveltime.setText(hourOfDay+":"+minute);}else{wait_edit_arriveltime.setText(getHonor()+":"+getMin());Toast.makeText(MainActivity.this, "请选择大于现在时刻的分钟", 2000).show();}}else{wait_edit_arriveltime.setText(getHonor()+":"+getMin());Toast.makeText(MainActivity.this, "请选择大于现在时刻的小时", 2000).show();}break;case 3://设置日期等于当前日期之前,提示日期还未设置正确,不能设置时间wait_edit_arriveltime.setText(getHonor()+":"+getMin());Toast.makeText(MainActivity.this, "请先设置正确的日期", 2000).show();break;default:break;}}};Log.i(TAG,"init----------->flag:"+flag+",hourOfDay:"+getHonor()+",minute:"+getMin());dialog = new TimePickerDialog(this, timeListener, getHonor(),getMin(), true);break;case 1:AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("您要确定放弃编辑吗?");builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {MainActivity.this.finish();}});builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int whichButton) {}});builder.show();break;default:break;}return dialog;}
具体的代码,请点击下载:1:http://download.csdn.net/detail/duancanmeng/4480117 2:http://download.csdn.net/detail/duancanmeng/4480126
- Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决办法
- Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决办法升级版
- Android:设置日期和时间不能选择当前时刻以前的日期时间的解决办法
- 一些时间选择的判断和不能设定比当前时间早的日期?
- android日期和时间的设置
- Android日期时间控件的学习笔记
- Android系统当前时间日期的获取
- JavaScript 获取当前的日期和时间
- Java获取当前的日期和时间
- Android获得当前日期和时间的方法
- EasyUI只可以选择当前日期以前的日期
- Android 滚动的时间日期选择控件
- mui自定义日期的起始时间为当前时间,只能选择当前之后的时间
- Mysql日期和时间类型的选择
- 显示当前的时间日期
- 设置datetimepicket的时间为当天日期+当前时间,当天日期+“00:00:00”的格式,选择的日期+“23:59:59”的格式
- EXTJS 开始日期和开始时间,结束日期和结束时间,当前日期和当前时间之间的比较
- Android根据当前时间获取前面的时间日期,或者之后的时间日期
- 用VC实现特定编辑框上对回车键响应
- UML核心元素之包
- 编程之美3.7
- json解析例子
- MySQL group_concat函数进行行转列使用
- Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决办法
- c# 反射调用程序集方法、接口实例
- pl/sql developer 中文乱码
- 常用批处理命令之For命令详解
- ubuntu12.04里面安装mysql
- 个人常用eclipse快捷键,不断更新
- POSIX thread (pthread) 简介
- 欧洲核子研究中心公布强子对撞机事故初步分析
- 托管和非托管代码