《Android开发卷——自定义日期选择器(三)》
继
《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开发卷——自定义日期选择器(三)》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 阿里巴巴云数据仓库 MaxCompute 数据安全最佳实践
简介:MaxCompute作为企业级SaaS模式云数据仓库,正在为客户业务及其数据提供持续的安全保护. MaxCompute 近期对产品的安全能力进行了全面升级 ,结合数据生命周期,针对数据误用.数 ...
- 监控最佳实践--redis及业务接口
简介: 监控最佳实践--redis及业务接口 1. 背景 1.1 问题 2020-12-04,客户侧redis集群版监控DB0 CPU突增至100%,导致数据库无法正常服务,经排查客户侧业务上存在2M ...
- 从右边开始寻找整数的第k位
从右边开始寻找整数的第k位 Implement match_k, which takes in an integer k and returns a function that takes in a ...
- 2019-10-31-WPF-设置纯软件渲染
title author date CreateTime categories WPF 设置纯软件渲染 lindexi 2019-10-31 8:59:2 +0800 2018-04-20 16:36 ...
- 利用引用传递一次遍历构造菜单树(附java&go demo)
目录 原理讲解 java demo Go demo 优点 原理讲解 利用引用传递,当儿子的儿子变动的时候,自己的儿子的儿子也变动(取地址) java demo package com.huiyuan. ...
- Unsortbin attack原理及分析
Unsortbin attack原理 ️条件:首先要实现Unsortbin attack前提是可以控制Unsortbin attack chunk的bk指针 ️目的:我们可以实现修改任意地址为一个比较 ...
- CMake 教程(待完善)
Cmake 教程 写在前面 如果工程只有几个文件,直接编写Makefile更直接明了 如果使用C.C++.之外的语言,请不要使用cmake 如果使用的语言有非常完备的构建体系,不需要使用cmake C ...
- ruby 常用代码片段
# 文件的当前目录 puts __FILE__ # string.rb # 文件的当前行 puts __LINE__ # 6 #文件的当前目录 puts __dir__ #/media/haima/3 ...
- SQL中常用的字符串CHARINDEX函数和PATINDEX函数详解!
今天整理了些日常可能经常遇到的一些处理字符串的函数,有些可能在写SQL时突然间想不到如何使用,今天就给大家总结两个函数的应用方法,以备不时之需!记得点赞收藏! CHARINDEX(expression ...
- angular自定义属性指令
在angular中有三种类型的指令: 组件–拥有模板的指令: 结构性指令–通过添加和移除DOM元素改变DOM布局的指令; 属性型指令–改变元素.组件或其他指令的外观和行为的指令: 组件是这三种指令中最 ...