利用Android TimePicker 和 DatePicker 实现对时间的限制
2016-06-07 00:00
806 查看
最近项目里需要对时间限制的时间选择器,当然实现这种功能完全可以自定义一个,网上也有很多自定义的 时间选择器,在原来的基础上根据自己的需要修改一下就可以了。我才用了android 自带的TimePicker,和 DatePicker 以及 dialog;
先来看看原理:
1, DatePicker :
DatePicker 相对 TimePicker 还好点, 因为它自带了 setMinDate()和setMaxDate()两个方法, 我们直接就可以通过这两个方法对datepicker进行范围的设定:
2,Timepicker:
timepicker 相对于 datepicker 来说就难搞一点,因为它对应的类中功能相当无力;所以在做这个功能的时候datepicker解决后,卡在timepicker这一天;后来总结下来,不得不承认自己的java基础实在是太差;因为在这里我们要用到的一个知识点是:反射。
我们来看一看google源码的内容:
a, 先看一下 datepicker 里面的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/b6fe060e7a0bd373ea8140d1ae4f5a7e.png)
在DatePicker类里定义了这三个属性,我们可以猜到datepicker里的数据显示就是这三个NumberPicker对象的属性实现的功能;
在datepicker里的setMinDate()和setMaxDate()使用了numberPicker类中的setMinValue和setMaxValue()方法;至此,我想思路也差不多了
b,然后看看 timepicker 里面的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/5af0cd0b896ef8e9e43f6c1a4a2a8361.png)
一样的类型,那么只要我们能获得 NumberPicker 的两个对象:mHourSpinner 和 mMinuteSpinner , 就可以对Timepicker 进行时间范围的设定了:
========================== 我是分割线 ======================
因为API21以后的TimePicker类有所改变,所以再用以上反射方法是获取不到mHourSpinner,和mMinuteSpinner的。所以在Android L 或之后版本的手机是设置不了时间范围的。所以该怎么办,没办法,最好自定义一个好了。百度了一下,有位网友自定义了一个PickerView,在这基础上,我又做了些改动。可以根据当前时间动态设置可选时间范围。
具体源码如下地址:
http://download.csdn.net/detail/qq_33363534/9591234
是的,就这么简单,然而折磨了我一天多。然而我自己还是太水;
感谢这位仁兄:http://www.bkjia.com/Androidjc/884699.html
另附上demo 下载地址: http://download.csdn.net/detail/qq_33363534/9543855
先来看看原理:
1, DatePicker :
DatePicker 相对 TimePicker 还好点, 因为它自带了 setMinDate()和setMaxDate()两个方法, 我们直接就可以通过这两个方法对datepicker进行范围的设定:
Calendar minCalendar = Calendar.getInstance(); minCalendar.set(Calendar.DAY_OF_MONTH, minCalendar.get(Calendar.DAY_OF_MONTH)+delayDays); datePicker.setMinDate(minCalendar.getTimeInMillis());//添加范围的最小值 Calendar maxCalendar = Calendar.getInstance(); maxCalendar.add(Calendar.YEAR, 2);//设置年的范围(今年是2016,第二个参数是2则,datepicker范围为2016-2018) datePicker.setMaxDate(maxCalendar.getTimeInMillis());//添加范围的最小值 Calendar curCalendar = Calendar.getInstance(); datePicker.init(curCalendar.get(Calendar.YEAR), curCalendar.get(Calendar.MONTH), curCalendar.get(Calendar.DAY_OF_MONTH), null);
2,Timepicker:
timepicker 相对于 datepicker 来说就难搞一点,因为它对应的类中功能相当无力;所以在做这个功能的时候datepicker解决后,卡在timepicker这一天;后来总结下来,不得不承认自己的java基础实在是太差;因为在这里我们要用到的一个知识点是:反射。
我们来看一看google源码的内容:
a, 先看一下 datepicker 里面的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/b6fe060e7a0bd373ea8140d1ae4f5a7e.png)
在DatePicker类里定义了这三个属性,我们可以猜到datepicker里的数据显示就是这三个NumberPicker对象的属性实现的功能;
在datepicker里的setMinDate()和setMaxDate()使用了numberPicker类中的setMinValue和setMaxValue()方法;至此,我想思路也差不多了
b,然后看看 timepicker 里面的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/5af0cd0b896ef8e9e43f6c1a4a2a8361.png)
一样的类型,那么只要我们能获得 NumberPicker 的两个对象:mHourSpinner 和 mMinuteSpinner , 就可以对Timepicker 进行时间范围的设定了:
try {//反射 Field hourSpinnerField = timePicker.getClass().getDeclaredField("mHourSpinner"); hourSpinnerField.setAccessible(true); NumberPicker hourSpinner = (NumberPicker) hourSpinnerField.get(timePicker); hourSpinner.setMinValue(minHour); hourSpinner.setMaxValue(maxHour); } catch (Exception e) { e.printStackTrace(); }
========================== 我是分割线 ======================
因为API21以后的TimePicker类有所改变,所以再用以上反射方法是获取不到mHourSpinner,和mMinuteSpinner的。所以在Android L 或之后版本的手机是设置不了时间范围的。所以该怎么办,没办法,最好自定义一个好了。百度了一下,有位网友自定义了一个PickerView,在这基础上,我又做了些改动。可以根据当前时间动态设置可选时间范围。
具体源码如下地址:
http://download.csdn.net/detail/qq_33363534/9591234
是的,就这么简单,然而折磨了我一天多。然而我自己还是太水;
感谢这位仁兄:http://www.bkjia.com/Androidjc/884699.html
另附上demo 下载地址: http://download.csdn.net/detail/qq_33363534/9543855
相关文章推荐
- Redis中实现查找某个值的范围
- Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
- 基于Silverlight DataGrid中无代码设置开始与结束日期DatePicker的实现方法
- BootStrap的Datepicker控件使用心得分享
- jQuery插件datepicker 日期连续选择
- jquery UI Datepicker时间控件的使用方法(基础版)
- jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
- jquery UI Datepicker时间控件的使用及问题解决
- jquery日历插件datepicker用法分析
- jQuery日历插件datepicker用法详解
- JQuery日期插件datepicker的使用方法
- Jquery日期选择datepicker插件用法实例分析
- jquery UI Datepicker时间控件的使用方法(终结版)
- jquery UI Datepicker时间控件的使用方法(加强版)
- datePicker――日期选择控件(with jquery)
- php获取指定范围内最接近数的方法
- ASP.NET使用My97DatePicker日期控件实例
- android中DatePicker和TimePicker的使用方法详解
- ASP.NET项目开发中日期控件DatePicker如何使用
- 日期控件My97 DatePicker 的使用