最近接触了日期选择的功能,那么肯定得需要一个日期选择控件,Android 系统有自带的 DatePicker 控件,但是不说这个控件有多

难看吧,现在 Android 手机版本那么多,用户弹出来的控件五花八门的也不太好,所以只好走自定义的道路了。先是在网上找了一

些demo看了看,发现不是很满足自己的需求,但是又懒得自己从头写,就找了一个还不错的demo,对代码进行了一些简化,并添

加了一些方法来满足个人需求。

首先看看效果图:

     

代码比较多就不全部贴上来了,需要的朋友可以自行下载完整源码查看。

这里就大概讲一下几种调用方法:

  1. private void initDatePicker() {
  2. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA);
  3. String now = sdf.format(new Date());
  4. currentDate.setText(now.split(" ")[0]);
  5. currentTime.setText(now);
  6. customDatePicker1 = new CustomDatePicker(this, new CustomDatePicker.ResultHandler() {
  7. @Override
  8. public void handle(String time) { // 回调接口,获得选中的时间
  9. currentDate.setText(time.split(" ")[0]);
  10. }
  11. }, "2010-01-01 00:00", now); // 初始化日期格式请用:yyyy-MM-dd HH:mm,否则不能正常运行
  12. customDatePicker1.showSpecificTime(false); // 不显示时和分
  13. customDatePicker1.setIsLoop(false); // 不允许循环滚动
  14. customDatePicker2 = new CustomDatePicker(this, new CustomDatePicker.ResultHandler() {
  15. @Override
  16. public void handle(String time) { // 回调接口,获得选中的时间
  17. currentTime.setText(time);
  18. }
  19. }, "2010-01-01 00:00", now); // 初始化日期格式请用:yyyy-MM-dd HH:mm,否则不能正常运行
  20. customDatePicker2.showSpecificTime(true); // 显示时和分
  21. customDatePicker2.setIsLoop(true); // 允许循环滚动
  22. }

这里是对自定义控件的初始化以及一些参数的设置,其中关键的是一个构造方法和两个设置显示效果的方法。

  1. public CustomDatePicker(Context context, ResultHandler resultHandler, String startDate, String endDate)

其中,第一个参数是 Activity 的Context,第二个参数是一个回调结果的接口,通过该接口可以把选中的时间发送给当前 Activity ,

第三个和第四个参数分别为该日期控件允许选择的范围的起始时间和结束时间。这里需要说明一下的是起始时间和结束时间的格式

必须为“yyyy-MM-dd HH:mm”,否则该控件不会被初始化。

  1. void showSpecificTime(boolean show)
  2. void setIsLoop(boolean isLoop)

第一个方法用于设置该日期选择控件是否显示时和分,如上两张图所示,一个只能选择到天,另一个可以选择到分。

第二个方法用于设置该日期选择控件中的滚轴是否可以循环滚动,如上两张图所示,一个滚动到底就不能继续了,另一个可以循环

滚动。

初始化成功后,可以通过以下方式调用:

  1. @Override
  2. public void onClick(View v) {
  3. switch (v.getId()) {
  4. case R.id.selectDate:
  5. // 日期格式为yyyy-MM-dd
  6. customDatePicker1.show(currentDate.getText().toString());
  7. break;
  8. case R.id.selectTime:
  9. // 日期格式为yyyy-MM-dd HH:mm
  10. customDatePicker2.show(currentTime.getText().toString());
  11. break;
  12. }
  13. }

这里传入的时间字符串参数的格式必须是正确的日期格式,否则不会显示控件。

到这一步就可以显示日期选择控件并获取选中时间了。

接下来说一下该控件用到的一些资源文件,可以通过修改这些资源文件对控件进行一些简单的修改。

首先是 res\values\colors.xml 文件,这里面定义了一些该控件用到的颜色:

  1. <resources>
  2. <color name="background">#FFFFFF</color>
  3. <color name="split_line">#11112233</color>
  4. <color name="text1">#59B29C</color>
  5. <color name="text2">#333333</color>
  6. </resources>

从上到下一次是背景颜色,分隔线颜色,标题、按钮和选中时间的字体颜色,其余字体颜色。

接下来是 res\values\strings.xml 文件,这里定义了显示的文字:

  1. <resources>
  2. <string name="cancle">取消</string>
  3. <string name="title">请选择时间</string>
  4. <string name="commit">确定</string>
  5. <string name="year">年</string>
  6. <string name="month">月</string>
  7. <string name="day">日</string>
  8. <string name="hour">时</string>
  9. <string name="minute">分</string>
  10. </resources>

具体的显示位置可自行参照图片判断。

最后是 res\values\styles.xml 文件,这里定义了该控件弹出的效果,一般可不用修改:

  1. <resources>
  2. <style name="time_dialog" parent="android:style/Theme.Dialog">
  3. <item name="android:windowFrame">@null</item>
  4. <item name="android:windowNoTitle">true</item>
  5. <item name="android:windowIsFloating">true</item>
  6. <item name="android:windowContentOverlay">@null</item>
  7. <item name="android:windowBackground">@color/background</item>
  8. </style>
  9. </resources>

最后附上源码

转自:Android 好看的自定义滚动式日期选择控件

推荐一个android 日期时间选择器(转)的更多相关文章

  1. Android日期时间选择器实现以及自定义大小

    本文主要讲两个内容:1.如何将DatePicker和TimePicker放在一个dialog里面:2.改变他们的宽度: 问题1:其实现思路就是自定义一个Dialog,然后往里面同时放入DatePick ...

  2. android日期时间选择器

    android原生的日期时间控件,因为是原生的总有其满足不了我们需求的时候,Android 手机版本那么多,用户弹出来的控件五花八门.因为项目需要,在网上找了一 些demo看了看,感觉有些写的很好,很 ...

  3. Android日期时间选择器DatePicker、TimePicker日期时间改变事件响应(Android学习笔记)

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  4. Android中实现日期时间选择器(DatePicker和TimePicker)

    利用Android应用框架提供的DatePicker(日期选择器)和TimePicker(时间选择器),实现日期时间选择器. Dialog的Content布局文件(date_time_dialog.x ...

  5. 移动端lCalendar纯原生js日期时间选择器

    网上找过很多的移动端基于zepto或jquery的日期选择器,在实际产品中也用过一两种,觉得都不太尽如人意,后来果断选择了H5自己的日期input表单,觉得还可以,至少不用引用第三方插件了,性能也不错 ...

  6. 24款最好的jQuery日期时间选择器插件

    如果你正在创建一个网络表单,有很多事情你需要在你的应用程序中使用.有时您需要特别的输入,从用户的日期和时间,如发票日期,生日,交货时间,或任何其他此类信息.如果你有这样的需要,可以极大地从动态的jQu ...

  7. Bootstrap-datepicker日期时间选择器的简单使用

    日期时间选择器 目前,bootstrap有两种日历.datepicker和datetimepicker,后者是前者的拓展. Bootstrap日期和时间组件: 使用示例: 从左到右依次是十年视图.年视 ...

  8. flatpickr功能强大的日期时间选择器插件

    flatpickr日期时间选择器支持移动手机,提供多种内置的主题效果,并且提供对中文的支持.它的特点还有: 使用SVG作为界面的图标. 兼容jQuery. 支持对各种日期格式的解析. 轻量级,高性能, ...

  9. 日期时间选择器插件flatpickr

    前言:在网页上需要输入时间的时候,我们可以用HTML5的inputl中的date类型.但是如下入所示,有些浏览器不支持.flatpickr这个小插件可以解决这个问题. 1.flatpickr日期时间选 ...

随机推荐

  1. 每天一个linux命令8之grep高级篇

    1语法       grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索-c 计算找到的符合行的次数-i 忽略大小写-n 顺便输出行号-v 反向选择,即找 没有搜索字 ...

  2. Bluetooth篇 开发实例之七 匹配&UUID

    匹配和通信是两回事. 1.用过Android系统设置(Setting)的人都知道蓝牙搜索之后可以建立配对和解除配对,但是这两项功能的函数没有在SDK中给出.但是可以通过反射来获取. 知道这两个API的 ...

  3. 细说JavaScript对象(4): for in 循环

    如同 in 运算符一样,使用 for in 循环遍历对象属性时,也将往上遍历整个原型链. // Poisoning Object.prototype Object.prototype.bar = 1; ...

  4. windows下如何添加、删除和修改静态路由

    1.添加一条路由表 route add 192.168.100.0 mask 255.255.255.248 192.168.1.1 metric 3 if 2 1 2 添加一条路由记录,所有到192 ...

  5. net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案

    net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案 今天在用List集合转换成json数组的时候发生了这个错误,这个 ...

  6. Apache Beam WordCount编程实战及源代码解读

    概述:Apache Beam WordCount编程实战及源代码解读,并通过intellij IDEA和terminal两种方式调试执行WordCount程序,Apache Beam对大数据的批处理和 ...

  7. HIVE 不支持group by 别名

    hive不支持group by 别名,如果需要group by 别名的情况,可以使用 别名的 值作为group by 的值

  8. 【机器学习】Mahout算法集

    在Mahout实现的机器学习算法见下表 算法类 算法名 中文名 分类算法 Logistic Regression 逻辑回归 Bayesian 贝叶斯 SVM 支持向量机 Perceptron 感知器算 ...

  9. Linux远程执行echo问题

    先看一段代码 host="master slave1 slave2 slave3 slave4 slave5" for i in $host do ssh $i "ech ...

  10. Spring声明式事务的配置方式

    1.事务的特性   原子性:事务中的操作是不可分割的一部分   一致性:要么同时成功,要么同时失败(事务执行前后数据保持一致)   隔离性:并发互不干扰     持久性:事务一旦被提交,它就是一条持久 ...