Android自定义时间控件不可选择未来时间

本文介绍了如何在Android中创建一个自定义时间控件,该控件不允许用户选择未来的日期。详细说明了需求分析,包括不可选择未来时间的功能,并提供了相关代码示例,使用了WheelView实现滑动选择。同时,文章提供了源码下载链接以供参考。
摘要由CSDN通过智能技术生成

本文出自:http://blog.csdn.net/dt235201314/article/details/78718066

Android自定义时间控件选择开始时间到结束时间

Android自定义时间控件不可选择未来时间

一丶效果图

二丶概述

说好的关于时间控件整理,这里就说说常用的自定义,关于基础其他文章写得太详细了

基础学习:

Java 日期时间

Date & Time组件(上)

Date & Time组件(下)

API在线文档Data Calendar DateFormat

三丶需求分析

1.滑动选择时间确定到日,不可选择未来时间(年月日都不能超过当前月数)

2.自定义

通常涉及到时间控件,1.选择时间,查询数据;2选择时间上报数据


四丶看代码

1.DateSelectDialog.Java

public class DateSelectDialog extends Dialog implements OnClickListener {
    private Context mContext;

    /**
     * 事件选取完毕监听
     */
    private OnDateSelectFinished onDateSelectFinished;
    /**
     * 确认
     */
    private Button mOk;
    /**
     * 返回
     */
    private Button mBack;
    /**
     * 开始、结束年份
     */
    private static int START_YEAR = 1990, END_YEAR = 2100;
    /**
     * 最大年龄
     */
    private final int LARGEST_AGE = 119;
    /**
     * 年
     */
    private WheelView mYearView;
    /**
     * 月
     */
    private WheelView mMonthView;
    /**
     * 日
     */
    private WheelView mDayView;
    /**
     * 时
     */
    private WheelView mHourView;
    /**
     * 分
     */
    private WheelView mMinuteView;
    /**
     * list列表(大月份)
     */
    private List<String> mListBig;
    /**
     * list列表(小月份)
     */
    private List<String> mListLittle;

    /* 是否只选择本年 */
    private boolean isOnlyThisYear = false;

    private  boolean isShowMinute = false;
    /* 是否只选择本月 */
    private boolean isOnlyThisMonth = false;

    public static final String YEAR = "year";
    public static final String MONTH = "month";
    public static final String DAY = "day";
    int year;
    int month;
    int day;
    int hour;
    int minute;

    int curYear;
    int curMonth;
    int curDay;

    boolean HourMinuteVisiable;

    /**
     * 是否只是显示本年和本月的时间选择器
     *
     * @param context              context
     * @param date                 传入的时间 格式 2017-2-13
     * @param onDateSelectFinished onDateSelectFinished
     * @param isOnlyThisYear       isOnlyThisYear 是否只显示本年
     * @param isOnlyThisMonth      isOnlyThisMonth 是否只显示本月
     */
    public DateSelectDialog(Context context, String date, OnDateSelectFinished onDateSelectFinished, boolean isOnlyThisYear, boolean isOnlyThisMonth) {
        super(context, R.style.DialogTheme);
        setContentView(R.layout.date_layout);
        this.mContext = context;
        this.onDateSelectFinished = onDateSelectFinished;
        this.isOnlyThisYear = isOnlyThisYear;
        this.isOnlyThisMonth = isOnlyThisMonth;
        init(date, true);
    }

    /**
     * <br> </br>
     *
     * @param context
     */
    public DateSelectDialog(Context context, String date, OnDateSelectFinished onDateSelectFinished) {
        super(context, R.style.DialogTheme);
        setContentView(R.layout.date_layout);
        this.mContext = context;
        this.onDateSelectFinished = onDateSelectFinished;
        init(date, true);
    }

    public DateSelectDialog(Context context, String date, OnDateSelectFinished onDateSelectFinished, boolean isShowHour) {
        super(context, R.style.DialogTheme);
        setContentView(R.layout.date_layout);
        this.mContext = context;
        this.onDateSelectFinished = onDateSelectFinished;
        init(date, isShowHour);
    }

    private void init(String date, boolean isShowHour) {
        Calendar calendar = Calendar.getInstance();
        curYear = calendar.get(Calendar.YEAR);
        curMonth = calendar.get(Calendar.MONTH) + 1;
        curDay = calendar.get(Calendar.DATE);
        hour = calendar.get(Calendar.HOUR_OF_DAY);
        minute = calendar.get(Calendar.MINUTE);

        String[] ymd = date.split("-");
        if (ymd.length > 2) {
            curYear = Integer.parseInt(ymd[0]);
            curMonth = Integer.parseInt(ymd[1]) - 1;
            String[] dhm = ymd[2].split(" ");
            curDay = Integer.parseInt(dhm[0]);
            if (dhm != null && dhm.length > 1) {
                String[] hm = dhm[1].split(":");
                if (hm.length > 1) {
                    hour = Integer.parseInt(hm[0])
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值