《Android开发卷——自定义日期选择器(一)》:http://blog.csdn.net/chillax_li/article/details/19047913

《Android开发卷——自定义日期选择器(二)》:http://blog.csdn.net/chillax_li/article/details/19172899

之后,在之前的基础上添加了两个按钮的单击事件

public class TestDialog extends Dialog {

	private Context context;
private int style; private NumberPicker np1,np2,np3;
private static String str1 = "1999";
private static String str2 = "1";
private static String str3 = "1"; public TestDialog(Context context) {
super(context);
this.context = context;
} public TestDialog(Context context, int style) {
super(context);
this.context = context;
this.style = style;
} @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.dialog); np1 = (NumberPicker) findViewById(R.id.np1);
np2 = (NumberPicker) findViewById(R.id.np2);
np3 = (NumberPicker) findViewById(R.id.np3); np1.setMaxValue(2299);
np1.setMinValue(1970);
np1.setValue(1999);
np1.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override
public void onValueChange(NumberPicker arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
str1 = np1.getValue() + "";
if (Integer.parseInt(str1) % 4 == 0
&& Integer.parseInt(str1) % 100 != 0
|| Integer.parseInt(str1) % 400 == 0) {
if(str2.equals("1")||str2.equals("3")||str2.equals("5")||str2.equals("7")||str2.equals("8")||str2.equals("10")||str2.equals("12")){
np3.setMaxValue(31);
np3.setMinValue(1);
}else if(str2.equals("4")||str2.equals("6")||str2.equals("9")||str2.equals("11")){
np3.setMaxValue(30);
np3.setMinValue(1);
}else{
np3.setMaxValue(29);
np3.setMinValue(1);
} } else {
if(str2.equals("1")||str2.equals("3")||str2.equals("5")||str2.equals("7")||str2.equals("8")||str2.equals("10")||str2.equals("12")){
np3.setMaxValue(31);
np3.setMinValue(1);
}else if(str2.equals("4")||str2.equals("6")||str2.equals("9")||str2.equals("11")){
np3.setMaxValue(30);
np3.setMinValue(1);
}else{
np3.setMaxValue(28);
np3.setMinValue(1);
}
} }
}); np2.setMaxValue(12);
np2.setMinValue(1);
np2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override
public void onValueChange(NumberPicker arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
str2 = np2.getValue()+"";
if(str2.equals("1")||str2.equals("3")||str2.equals("5")||str2.equals("7")||str2.equals("8")||str2.equals("10")||str2.equals("12")){
np3.setMaxValue(31);
np3.setMinValue(1);
}else if(str2.equals("4")||str2.equals("6")||str2.equals("9")||str2.equals("11")){
np3.setMaxValue(30);
np3.setMinValue(1);
}else{
if (Integer.parseInt(str1) % 4 == 0
&& Integer.parseInt(str1) % 100 != 0
|| Integer.parseInt(str1) % 400 == 0) {
np3.setMaxValue(29);
np3.setMinValue(1);
} else {
np3.setMaxValue(28);
np3.setMinValue(1);
}
}
}
}); np3.setMaxValue(31);
np3.setMinValue(1);
np3.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override
public void onValueChange(NumberPicker arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
str3 = np3.getValue()+"";
}
}); // 设置返回按钮事件和文本
if (backButtonText != null) {
Button bckButton = ((Button)findViewById(R.id.dialog_back));
bckButton.setText(backButtonText); if (backButtonClickListener != null) {
bckButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
backButtonClickListener.onClick(new TestDialog(getContext()), DialogInterface.BUTTON_NEGATIVE);
dismiss();
}
});
}
} else {
findViewById(R.id.dialog_back).setVisibility(View.GONE);
} // 设置确定按钮事件和文本
if (confirmButtonText != null) {
Button cfmButton = ((Button)findViewById(R.id.dialog_confirm));
cfmButton.setText(confirmButtonText); if (confirmButtonClickListener != null) {
cfmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
confirmButtonClickListener.onClick(new TestDialog(getContext()), DialogInterface.BUTTON_NEGATIVE);
dismiss();
}
});
}
} else {
findViewById(R.id.dialog_confirm).setVisibility(View.GONE);
}
} private String backButtonText; // 对话框返回按钮文本
private String confirmButtonText; // 对话框确定文本 // 对话框按钮监听事件
private DialogInterface.OnClickListener backButtonClickListener,
confirmButtonClickListener; /**
* 设置back按钮的事件和文本
*
* @param backButtonText
* @param listener
* @return
*/
public void setBackButton(String backButtonText,
DialogInterface.OnClickListener listener) {
this.backButtonText = backButtonText;
this.backButtonClickListener = listener;
} /**
* 设置确定按钮事件和文本
*
* @param negativeButtonText
* @param listener
* @return
*/
public void setConfirmButton(String confirmButtonText,
DialogInterface.OnClickListener listener) {
this.confirmButtonText = confirmButtonText;
this.confirmButtonClickListener = listener;
} public static String getDate(){
return str1+"-"+str2+"-"+str3;
} @Override
public void show() {
// TODO Auto-generated method stub
super.show();
}
}

项目地址:http://download.csdn.net/detail/chillax_li/6923505

在这里有个问题要注意:就是切勿误删values-v11和values-v14这两个文件夹,因为这两个表示Android 3.*以上的样式,如果误删了,样式会变得很丑

(正常情况)(误删文件夹情况,NumPicker样式被改变,使用android
2.*的旧版本)

尊重原创,转载请注明出处:http://blog.csdn.net/chillax_li/article/details/19212895

《Android开发卷——自定义日期选择器(三)》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用

    简介: 由于这篇文章真的很长,大量的篇幅在讲述内核的实现,如果你对这部分不感兴趣,那么在建议你在看完第一部分的三个问题后,思考一下,然后直接跳转到我们对问题的回答. 作者:张伟(谢石)   由于这篇文 ...

  2. 解析 RocketMQ 业务消息--“顺序消息”

    简介: 本篇将继续业务消息集成的场景,从功能原理.应用案例.最佳实践以及实战等角度介绍 RocketMQ 的顺序消息功能. 作者:绍舒   引言 Apache RocketMQ 诞生至今,历经十余年大 ...

  3. 系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术

    ​简介:本篇以 first contact (通信两端建立首个连接) 场景为例,介绍 SMC-R 通信流程. ​ 文/龙蜥社区高性能网络SIG 一.引言 通过上一篇文章 <系列解读SMC-R:透 ...

  4. 从 RxJS 到 Flink:如何处理数据流?

    简介: 前端开发的本质是什么?响应式编程相对于 MVVM 或者 Redux 有什么优点?响应式编程的思想是否可以应用到后端开发中?本文以一个新闻网站为例,阐述在前端开发中如何使用响应式编程思想:再以计 ...

  5. dotnet 在 UOS 国产系统上使用 MonoDevelop 创建 GTK 全平台带界面应用

    本文告诉大家如何在 UOS 国产系统上开始使用 MonoDevelop 开发,通过创建 GTK# 应用,进入界面开发的第一步 在开始之前需要小伙伴先安装好 MonoDevelop 工具 安装完成之后, ...

  6. k8s之dns问题

    问题1: 描述:pod新建好后,无法ping通域名(无论是外网域名还是内网域名),但是可以ping通IP(包含外网IP和内网IP),不包括kube-dns的IP,和pod同一网段IP可以ping通 # ...

  7. 深入 Django 模型层:数据库设计与 ORM 实践指南

    title: 深入 Django 模型层:数据库设计与 ORM 实践指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories: ...

  8. 一、Doris演进史

    Apache Doris -- 为分析而生 Doris发展历程: Doris发展比较重要的关键节点与事件 #2008 - Doris1 :「筑巢引凤」的重要基石 早年,百度最主要的收入来源是广告.广告 ...

  9. R1_ES知识图谱

    业务量增加,优化..优化... 学习... 学习..... 阮一鸣,eBay Pronto 平台技术负责人,管理了 eBay 内部上百个 Elasticsearch 集群,数据规模超过 4000 节点 ...

  10. 1.13~1.14&&放假寄

    1.13 3点就放了,手机在机房就能拿到,我为了给手机充会电又多留了一会(事实证明这挺对的) 因为我们是 化微机的班,老师收手机都放在一个箱子里,要有人负责把剩下的手机搬到教室,我走得晚还被当成免费劳 ...