这个开源项目是模仿Google官方的time选择器做的,是否漂亮。让我爱不释手,真心喜欢。很有幸和大家一起分享下,那么话不多说开始讲解。

开源项目地址:https://github.com/flavienlaurent/datetimepicker

这个项目依赖于NineOldAndroids https://github.com/JakeWharton/NineOldAndroids

我这里直接将NineOldAndroids作为jar包copy到我给的lib中了,所以大家只需要使用一个lib就好。

原理:其实这个dialog就是一个fragmentDialog,所以我们可以直接启动这个控件就行了,不用任何布局文件的支持。此外我们还需要绑定监听器来判断用户的选择信息。下面是项目实现。

一、布局文件(就几个按钮,没啥好说的)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity" > <CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="vibrate"
android:layout_marginBottom="30dp"
android:id="@+id/checkBoxVibrate"
android:checked="true"/> <CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="close on single tap day"
android:layout_marginBottom="30dp"
android:id="@+id/checkBoxCloseOnSingleTapDay"
android:checked="true"/> <Button
android:id="@+id/dateButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:text="Select Date" /> <CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="close on single tap minute"
android:layout_marginBottom="30dp"
android:id="@+id/checkBoxCloseOnSingleTapMinute"
android:checked="true"/> <Button
android:id="@+id/timeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Select Time" /> </LinearLayout>

java代码(里面注释已经很详尽了,十分简单易用):

package com.kale.datatimepicker;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.Toast; import com.fourmob.datetimepicker.date.DatePickerDialog;
import com.fourmob.datetimepicker.date.DatePickerDialog.OnDateSetListener;
import com.sleepbot.datetimepicker.time.RadialPickerLayout;
import com.sleepbot.datetimepicker.time.TimePickerDialog; import java.util.Calendar; public class MainActivity extends FragmentActivity implements OnDateSetListener, TimePickerDialog.OnTimeSetListener { public static final String DATEPICKER_TAG = "datepicker";
public static final String TIMEPICKER_TAG = "timepicker"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); final Calendar calendar = Calendar.getInstance(); final DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(this,
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH),
isVibrate()); final TimePickerDialog timePickerDialog = TimePickerDialog.newInstance(this,
calendar.get(Calendar.HOUR_OF_DAY) ,
calendar.get(Calendar.MINUTE),
false, false);//最后两个参数,是否是24小时制,是否抖动。推荐false,false findViewById(R.id.dateButton).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
datePickerDialog.setVibrate(isVibrate());//是否抖动,推荐true
datePickerDialog.setYearRange(1985, 2028);//设置年份区间
datePickerDialog.setCloseOnSingleTapDay(isCloseOnSingleTapDay());//选择后是否消失,推荐false
datePickerDialog.show(getSupportFragmentManager(), DATEPICKER_TAG);//展示dialog,传一个tag参数
}
}); findViewById(R.id.timeButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
timePickerDialog.setVibrate(isVibrate());//是否抖动
timePickerDialog.setCloseOnSingleTapMinute(isCloseOnSingleTapMinute());//选择后是否消失,推荐false
timePickerDialog.show(getSupportFragmentManager(), TIMEPICKER_TAG);//展示dialog,传一个tag参数
}
}); //保存状态
if (savedInstanceState != null) {
DatePickerDialog dpd = (DatePickerDialog) getSupportFragmentManager().findFragmentByTag(DATEPICKER_TAG);
if (dpd != null) {
dpd.setOnDateSetListener(this);
} TimePickerDialog tpd = (TimePickerDialog) getSupportFragmentManager().findFragmentByTag(TIMEPICKER_TAG);
if (tpd != null) {
tpd.setOnTimeSetListener(this);
}
}
} private boolean isVibrate() {
return ((CheckBox) findViewById(R.id.checkBoxVibrate)).isChecked();
} private boolean isCloseOnSingleTapDay() {
return ((CheckBox) findViewById(R.id.checkBoxCloseOnSingleTapDay)).isChecked();
} private boolean isCloseOnSingleTapMinute() {
return ((CheckBox) findViewById(R.id.checkBoxCloseOnSingleTapMinute)).isChecked();
} //日期设置的监听器,得到年月日
@Override
public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
Toast.makeText(MainActivity.this, "new date:" + year + "-" + month + "-" + day, Toast.LENGTH_LONG).show();
} //时间设置的监听器,得到时分
@Override
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
/**
* 这里返回的hourOfDay是24小时制的小时,就是说无论你设置的timePicker是否是24小时制,这里都返回24小时制的小时。
* 很方便我们来做判断。比如如果hourOfDay>12就说明是下午了。
*/
Toast.makeText(MainActivity.this, "new time:" + hourOfDay + "-" + minute, Toast.LENGTH_LONG).show();
}
}

下面重点来了,如何修改开源项目中选择框的颜色。

我先给出默认的配色方案:

下面我将这几个配色属性进行编号,我还做了按编号来展示的示意图片。

根据不同的编号属性,进行单一变量的设置。图解如下:

:-(,我真是操碎了心啊。好啦,这样就大功告成了,下面是源码下载。PS:这个源码下载中我还附上了讲解的图片,方便大家查看。

源码下载:http://download.csdn.net/detail/shark0017/8080835

开源项目DataTimePicker实现时间和日期的选择的更多相关文章

  1. 7.Android开源项目WheelView的时间和地址联动选择对话框

    类似WheelView的时间和地址联动选择对话框在现在App经常看到,今天小结下. 主布局界面: <LinearLayout xmlns:android="http://schemas ...

  2. 阿里巴巴的26款超神Java开源项目,有时间阅读一下各个文档,增添一下知识广度

    1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务的 ...

  3. Android开发:为什么我们从来不去感谢开源项目维护者?

    今天我想谈一谈,为什么我们很少去感谢开源项目维护者: 一.这样的项目我也可以做啊 “蛤?这项目对我来说也太简单了吧.” “我一周之内就能做一个更好的版本出来.” 确实,很多人都可以在 Hackatho ...

  4. HelloGitHub 月刊最受欢迎的开源项目 Top10(2020 年)

    作者:HelloGitHub-卤蛋 2020 年已成往事,2021 年悄然而至. 在已经过完的 2020 年里 HelloGitHub 共发布了 12 期月刊,推荐了 419 个开源项目.​每个月的 ...

  5. Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)

    前言:github对开发者而言无疑是个宝藏,但想利用它可不是件简单的事,用Android studio导入开源项目会遇到各种问题,今天我就以github上的一个图片轮播项目为例,解决导入过程中的常见问 ...

  6. 项目心得——按照指定的日期/时间创建Date对象

    项目心得——按照指定的日期/时间创建Date对象 有时,在做项目中,需要获得指定日期的Date对象,这个指定的日期或者时间可能不是当前的时间.下面讲解两种获取指定日期/时间的Date对象的方法: pa ...

  7. 一个基于 Vue3 的开源项目,3个月时间 star 终于破千!

    本文主要是对如何做开源项目的一些思考. 前文回顾: <Vue3 来了,Vue3 开源商城项目重构计划正式启动!> <一个基于 Vue 3 + Vant 3 的开源商城项目> 关 ...

  8. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧

    注意:有网友提出部分项目停止更新的事情,这个问题我特意注意过,很多都是小功能组件,功能稳定,没有bug,没更新是正常的.够用就行了.其次技术支持的事情,对开源免费来说,不能太强求,这里发布的都是小功能 ...

  9. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Software Protector序列号生成组件.今天就通过一篇简单的文章来预览一下其强大的功 ...

随机推荐

  1. 设置idealUI选中变量的颜色与同名称变量的颜色一致

  2. ddmlib问题总结——同步获取设备信息

    通过IDevice.getProperty(String name)得到响应的设备属性.在实际的使用过程中发现,我的manufacturer总是获取不到,为null(获取代码如下),而剩下的属性都可以 ...

  3. fullcalendar插件日程管理

    日程管理-fullcalendar插件用法   前言 本文分享fullcalendar用法,最后面提供代码下载 说到日程管理,基于JQuery的插件FullCalendar当之无愧,完整的API稳定和 ...

  4. 【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))

    本文根据<大话数据结构>一书,实现了Java版的一个简单的散列表(哈希表). 基本概念 对关键字key,将其值存放在f(key)的存储位置上.由此,在查找时不需比较,只需计算出f(key) ...

  5. 001 SpringMVC的helloWorld程序

    一:helloworld程序 1.结构目录 2.添加lib包 3.在web.xml中配置DispatchServlet 这个就是主servlet. <?xml version="1.0 ...

  6. [java] DOS编译 .java 文件得到 .class 文件 并执行 以及使用外部 .jar包 时的命令

    当写一个java文件后,在DOS中进行编译与执行时,如果没有引入外来的包,那情况很简单 例如: public class hello_world { public static void main(S ...

  7. 洛谷AC200纪念

  8. 使用React Hooks新特性useReducer、useContext替代传统Redux高阶组件案例

    当我们使用redux进行数据管理的时候,一般都是在根组件通过Provider的方式引入store,然后在每个子组件中,通过connect的方式使用高阶组件进行连接,这样造成的一个问题是,大量的高阶组件 ...

  9. 【python学习-4】可复用函数与模块

    1.自定义函数 自定义函数格式如下: def <函数名> (参数列表): <函数语句> return <返回值> #!/usr/bin/python # 定义函数, ...

  10. Xamarin iOS教程之显示和编辑文本

    Xamarin iOS教程之显示和编辑文本 Xamarin iOS显示和编辑文本 在一个应用程序中,文字是非常重要的.它就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些应用程序要表达的 ...