当前位置:操作系统 > 安卓/Android >>

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

根据业务需求,需要实现如题的功能,细想一下,其中包含很多细节,如下:
1,如果设置年大于当前的年,那么月,日,时间可以随便设置;
2,如果设置年小于当前的年,那么则设置不能成功;
3,如果设置年等于当前的年,那么如果设置月大于当前的月,那么日,时间可以随便设置;
4,如果设置年等于当前的年,那么如果设置月小于当前的月,那么则设置不能成功;
5,如果设置年等于当前的年,那么如果设置月等于当前的月,那么如果设置日大于当前的日,则时间可以随便设置;
。。。。。。
等等
在android中,关于日期和时间,我们首先想到的便是DatePicker和TimePicker两个组件,接下来便是实现方式的问题,该如何实现呢?我本来设想的是用DatePickerDialog和TimePickerDialog,然后通过判断来决定DatePicker中的按钮是否可按,比如,设置年的值如果要小于当前的年的时候,则DatePicker中的“-”按钮则是不可按的。这种方式实现起来比较的麻烦,而且源码里面有些东西也没看懂,就自己做了个类似DatePickerDialog的组件,如下图:

今日是6号,“-”按钮是没有反映的,点击一下则变成了灰色,按照上面的业务一步一步的分析,则可以实现,不难,但是很烦琐特别是布局,最讨厌的就是调整布局,所以就把这些逻辑还是放到原有的DatePicker上来实现。当然实现的界面可能就没有这么直观了。
 
                                         

 

                                          1                                                                                                                 2

\  \

                                                  3                                                                                                          4

\  \

                                                5                                                                                                             6

\

可能感觉有点坑爹,但是还是将就吧。
看看关键的代码:
[java] 
@Override 
protected 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; 
              &

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,