最近接触了日期选择的功能,那么肯定得需要一个日期选择控件,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. Flash3D学习计划(四)——学习纹理相关知识,载入一张纹理,并应用于前面的矩形;并学习多层纹理映射相关知识,尝试dark map, glow map

    实现效果   主要代码   package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.Perspective ...

  2. Extjs Ext.grid.column.Column 隐藏显示列

    1.根据字段名字 grid.down("gridcolumn[dataIndex=PLAN_QTY]").show();//hide() 2.根据列号 grid.columns[1 ...

  3. Android activity中单击返回键或home键彻底退出应用

    @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BAC ...

  4. C# html的Table导出到Excel中

    C#中导出Excel分为两大类.一类是Winform的,一类是Web.今天说的这一种是Web中的一种,把页面上的Table部分导出到Excel中. Table导出Excel,简单点说,分为以下几步: ...

  5. UIWebView to view self signed websites (No private api, not NSURLConnection) - is it possible?

    What it actually does is to intercept the UIWebView to launch a NSURLConnection to allow the server ...

  6. iOS教程:如何使用NSFetchedResultsController

    不知不觉我们已经来到了Core Data系列教程的最后一部分了,在这里我们要讨论如何使用NSFetchedResultsController来优化我们的应用,提高应用的运行速度,减少其内存占用. 你是 ...

  7. JMeter之Ramp-up Period(in seconds)说明(可同时并发)(转载)

    Ramp-up Period(in seconds) [1]决定多长时间启动所有线程.如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行. ...

  8. 使用Hibernate框架来更新对象的注意事项

    Hibernate在更新对象的时候,如果对象的有些属性没有设置,那么在更新的时候,会被默认为空. 特别在更新表单对象的时候. 例子: 如: Department部门类 该部门类有以下属性:  id : ...

  9. 通过JBoss反序列化(CVE-2017-12149)浅谈Java反序列化漏洞

    前段时间学校学习J2EE,用到了jboss,顺便看了下jboss的反序列化,再浅谈下反序列化漏洞. Java序列化,简而言之就是把java对象转化为字节序列的过程.而反序列话则是再把字节序列恢复为ja ...

  10. JAVA之接口与实现

    /** *  * 功能:接口与实现 * 接口也体现了多态性 */package com.test; public class test5 { /**     * @param args     */  ...