开发者社区> yechaoa> 正文

Android日期选择器,年月日判断处理。

简介: Android日期选择器,年月日判断处理。
+关注继续查看

image.png

MainActivity.java



package com.yechaoa.datepickerdemo;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.NumberPicker;
import android.widget.TextView;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
    private TextView tvDate;
    private View mView;
    private NumberPicker np1, np2, np3;
    private int maxDay;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvDate = (TextView) findViewById(R.id.tv_date);
        tvDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDateDialog();
            }
        });
    }
    public void showDateDialog() {
        mView = View.inflate(this, R.layout.date_dialog, null);
        np1 = (NumberPicker) mView.findViewById(R.id.np1);
        np2 = (NumberPicker) mView.findViewById(R.id.np2);
        np3 = (NumberPicker) mView.findViewById(R.id.np3);
        //获取当前日期
        Calendar c = Calendar.getInstance();
        final int year =  c.get(Calendar.YEAR);
        final int month = c.get(Calendar.MONTH)+1;//月份是从0开始算的
        final int day = c.get(Calendar.DAY_OF_MONTH);
        //设置年份
        np1.setMaxValue(2999);
        np1.setValue(year); //中间参数 设置默认值
        np1.setMinValue(1900);
        //设置月份
        np2.setMaxValue(12);
        np2.setValue(month);
        np2.setMinValue(1);
        //设置天数
        np3.setMaxValue(31);
        np3.setValue(day);
        np3.setMinValue(1);
        //年份滑动监听
        np1.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                Log.i("NumberPicker","oldVal-----"+oldVal+"-----newVal-----"+newVal);
                //平年闰年判断
                if(newVal%4==0){
                    maxDay=29;
                }else {
                    maxDay = 28;
                }
                //设置天数的最大值
                np3.setMaxValue(maxDay);
            }
        });
        //月份滑动监听
        np2.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                Log.i("NumberPicker","oldVal-----"+oldVal+"-----newVal-----"+newVal);
                //月份判断
                switch (newVal){
                    case 2:
                        if(np1.getValue()%4==0){
                            maxDay=29;
                        }else{
                            maxDay=28;
                        }
                        break;
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        maxDay=31;
                        break;
                    default:
                        maxDay=30;
                        break;
                }
                //设置天数的最大值
                np3.setMaxValue(maxDay);
            }
        });
        new AlertDialog.Builder(MainActivity.this).setTitle("请选择时间")
                .setView(mView)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        int years = np1.getValue();
                        int months = np2.getValue();
                        int days = np3.getValue();
                        tvDate.setText(years + "年" + months + "月" + days + "日");
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .show();
    }
   
}


github:https://github.com/yechaoa/DatePickerDemo


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一个简单的Android网络访问全局码判断及通用数据解析方案
我们在开发中,网络请求经常会遇到各种错误码的判断。比如下面这样:
46 0
Android开发:获取当前系统时间和日期的方法
最近接手了公司的一个Android项目,一直在处理Android项目的App的开发,作为半路起家来说,总结了一些Android开发的心得和知识点,然后就写下来记录一下,分享给有需要的开发者查阅交流。那么本篇博文就来分享一下在Android开发过程中,涉及到获取系统当前日期和时间的方法,知识点虽然很常见,但是很实用。
1380 0
Android 日期选择器之DatePickerDialog
Android 日期选择器之DatePickerDialog
156 0
Android Studio 新建类时添加作者日期等。
Android Studio 新建类时添加作者日期等。
60 0
日期匹配星座,月日匹配星座,android 星座
日期匹配星座,月日匹配星座,android 星座
109 0
【Android 应用开发】Android - 时间 日期相关组件
【Android 应用开发】Android - 时间 日期相关组件
95 0
Android 笔记:计算当前日期时间前后几天的封装方法
Android 笔记:计算当前日期时间前后几天的封装方法
92 0
Android 获取时间戳 和时间戳转日期
Android 获取时间戳 和时间戳转日期
417 0
Android Studio 日期弹窗DatePickerDialog实例
本文目录 1. 功能 2. 布局 3. 代码 4. 效果
351 0
+关注
yechaoa
热爱开源,喜欢分享,CSDN博客专家、掘金签约作者、infoQ KOL作者、阿里云专家博主、51CTO专家博主、华为云云享专家;现就职于阿里巴巴,研究方向包括但不限于大前端、端基础架构与中间件、性能优化等。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像