完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog...

2023-05-16

完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog。具有同时选择日期、时间的功能。
在2.2、2.3平台,显示的效果可能会有一个大背景框在后面。4.0以上平台无此现象。此怪异效果通过各种手段未能解决。功能不影响正常使用。


import java.util.Calendar;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.LinearLayout;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

/**
 * 完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog。具有同时选择日期、时间的功能。<br>
 * 在2.2、2.3平台,显示的效果可能会有一个大背景框在后面。4.0以上平台无此现象。怪异的原因未能解决。
 * @author AsionTang
 * @since 2014年2月26日 17:02:24
 */
public class DateTimePickerDialog extends AlertDialog implements OnClickListener, OnDateChangedListener, OnTimeChangedListener
{
    private final OnDateTimeChangedListener mCallback;

    private final DatePicker mDatePicker;

    private final TimePicker mTimePicker;

    private static final String HOUR = "hour";

    private static final String MINUTE = "minute";

    private static final String IS_24_HOUR = "is24hour";

    private static final String YEAR = "year";

    private static final String MONTH = "month";

    private static final String DAY = "day";

    private final Calendar mCalendar;

    public DateTimePickerDialog(final Context context, final int theme, final OnDateTimeChangedListener callBack)
    {
    super(context, theme);
    this.mCallback = callBack;
    this.mCalendar = Calendar.getInstance();
    this.updateTitle();

    this.setButton(BUTTON_POSITIVE, context.getText(android.R.string.ok), this);
    this.setButton(BUTTON_NEGATIVE, context.getText(android.R.string.cancel), (OnClickListener) null);

    this.mDatePicker = new DatePicker(context);
    this.mDatePicker.init(this.mCalendar.get(Calendar.YEAR), this.mCalendar.get(Calendar.MONTH), this.mCalendar.get(Calendar.DAY_OF_MONTH), this);

    this.mTimePicker = new TimePicker(context);
    this.mTimePicker.setIs24HourView(true);
    this.mTimePicker.setCurrentHour(this.mCalendar.get(Calendar.HOUR_OF_DAY));
    this.mTimePicker.setCurrentMinute(this.mCalendar.get(Calendar.MINUTE));
    this.mTimePicker.setOnTimeChangedListener(this);

    final LinearLayout linearLayout = new LinearLayout(context);
    linearLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    linearLayout.setOrientation(LinearLayout.VERTICAL);//默认为HORIZONTAL(水平)
    linearLayout.setGravity(Gravity.CENTER);
    linearLayout.addView(this.mDatePicker);
    linearLayout.addView(this.mTimePicker);
    this.setView(linearLayout);
    }

    public DateTimePickerDialog(final Context context, final OnDateTimeChangedListener callBack)
    {
    this(context, 0, callBack);
    }

    /**
     * Gets the {@link DatePicker} contained in this dialog.
     * 
     * @return The DatePicker view.
     */
    public DatePicker getDatePicker()
    {
    return this.mDatePicker;
    }

    /**
     * Gets the {@link TimePicker} contained in this dialog.
     * 
     * @return The TimePicker view.
     */
    public TimePicker getTimePicker()
    {
    return this.mTimePicker;
    }

    @Override
    public void onClick(final DialogInterface dialog, final int which)
    {
    this.tryNotifyDateTimeSet();
    }

    @Override
    public void onDateChanged(final DatePicker view, final int year, final int month, final int day)
    {
    this.mDatePicker.init(year, month, day, this);

    this.mCalendar.set(Calendar.YEAR, year);
    this.mCalendar.set(Calendar.MONTH, month);
    this.mCalendar.set(Calendar.DAY_OF_MONTH, day);

    this.updateTitle();
    }

    @Override
    public void onRestoreInstanceState(final Bundle savedInstanceState)
    {
    super.onRestoreInstanceState(savedInstanceState);
    final int year = savedInstanceState.getInt(YEAR);
    final int month = savedInstanceState.getInt(MONTH);
    final int day = savedInstanceState.getInt(DAY);
    this.mDatePicker.init(year, month, day, this);

    final int hour = savedInstanceState.getInt(HOUR);
    final int minute = savedInstanceState.getInt(MINUTE);
    this.mTimePicker.setIs24HourView(savedInstanceState.getBoolean(IS_24_HOUR));
    this.mTimePicker.setCurrentHour(hour);
    this.mTimePicker.setCurrentMinute(minute);
    }

    @Override
    public Bundle onSaveInstanceState()
    {
    final Bundle state = super.onSaveInstanceState();
    state.putInt(YEAR, this.mDatePicker.getYear());
    state.putInt(MONTH, this.mDatePicker.getMonth());
    state.putInt(DAY, this.mDatePicker.getDayOfMonth());

    state.putInt(HOUR, this.mTimePicker.getCurrentHour());
    state.putInt(MINUTE, this.mTimePicker.getCurrentMinute());
    state.putBoolean(IS_24_HOUR, this.mTimePicker.is24HourView());

    return state;
    }

    @Override
    public void onTimeChanged(final TimePicker view, final int hourOfDay, final int minute)
    {
    this.mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    this.mCalendar.set(Calendar.MINUTE, minute);
    }

    public void setDate(final int year, final int monthOfYear, final int dayOfMonth)
    {
    this.mDatePicker.updateDate(year, monthOfYear, dayOfMonth);
    }

    public void setDateAndTime(final int year, final int monthOfYear, final int dayOfMonth, final int hour, final int minute,
        final boolean is24HourView)
    {
    this.setDate(year, monthOfYear, dayOfMonth);
    this.setTime(hour, minute, is24HourView);
    }

    public void setTime(final int hour, final int minute, final boolean is24HourView)
    {
    this.mTimePicker.setIs24HourView(is24HourView);
    this.mTimePicker.setCurrentHour(hour);
    this.mTimePicker.setCurrentMinute(minute);
    }

    private void tryNotifyDateTimeSet()
    {
    if (this.mCallback != null)
    {
        this.mDatePicker.clearFocus();
        this.mTimePicker.clearFocus();
        this.mCallback.onDateTimeChanged(this.mDatePicker, this.mTimePicker//
            , this.mDatePicker.getYear(), this.mDatePicker.getMonth(), this.mDatePicker.getDayOfMonth()//
            , this.mTimePicker.getCurrentHour(), this.mTimePicker.getCurrentMinute());
    }
    }

    private void updateTitle()
    {
    final String title = DateUtils.formatDateTime(this.getContext(), this.mCalendar.getTimeInMillis()//
        , DateUtils.FORMAT_SHOW_DATE//
            | DateUtils.FORMAT_NO_YEAR//
            | DateUtils.FORMAT_SHOW_WEEKDAY);
    this.setTitle(title);
    }

    public interface OnDateTimeChangedListener
    {
    void onDateTimeChanged(DatePicker dateView, TimePicker timeView, int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minute);
    }
}  

 

转载于:https://www.cnblogs.com/AsionTang/p/3569695.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog... 的相关文章

  • zabbix之监控redis云服务

    参考文档 xff1a http www 21yunwei com archi redis云服务的监控难点为服务部署在云上 xff0c 无法对服务进行配置等相关配置 实现方式 xff1a 编写采集脚本 gt 通过zabbix agent连接到
  • 卡方检验的自由度

    为什么80 的码农都做不了架构师 xff1f gt gt gt 自由度 xff1a 取值不受限制的变量的个数 如何理解这句简单的话呢 xff1f 给定一组数据 xff0c 我们来计算不同的统计量 xff0c 看看自由度的变化 这些数据分别为
  • Microsoft.NETCore.App 版本不一致导致的运行失败

    为什么80 的码农都做不了架构师 xff1f gt gt gt 场景重现 今天新建了一个 ASP NET Core 的项目 通过 Web Deploy 顺利发布到IIS上后 但访问时出现如下异常 异常原因 通过手动执行dotnet命令发现运
  • 2007年最值得期待的40部北美大片(争取去电影院看50%)

    1 Spider Man 3 蜘蛛侠3 导 演 xff1a 萨姆 莱米 Sam Raimi 主 演 xff1a 托比 马圭尔 Tobey Maguire Thomas Haden Church 柯尔斯滕 邓斯特 Kirsten Dunst
  • UML实例(五):在线购物系统设计类图

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在线购物系统设计类图文档 xff1a 1 图形文档 设计类图 界面类图 2 文字说明 该部分由以下部分组成 xff1a 类图综述 类描述 类联描述 继承描述 依赖描述和其他
  • 为啥很多网站的用户端都更新了,博客园还是原来的样子呢

    重回博客园发布一些工作中的文章 xff0c 心得 xff0c 发现博客园在界面上还是跟7 8年前没啥区别 xff0c 界面经典好用 xff0c 这是不用质疑的 xff0c 但是发布内容的一些地方 xff0c 好像不像其他网站那么方便了 xf
  • ASP.NET的必须知道的东东(HttpModule,HttpHandler)

    asp net架构 一 asp net请求的处理过程 xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff
  • matlab练习程序(Hilbert图像置乱)

    正好刚写了Hibert生成曲线 xff0c 不如再加一篇应用的程序 关于Hilbert图像置乱 xff0c 我在网上搜的应用领域主要集中在数字水印和图像加密上 xff0c 而这两个领域我都没怎么接触过 大部分的图像置乱都是如下图的置乱1所示
  • 深入C++“准”标准库,Boost你的力量

    最近一年我电话面试了数十位 C 43 43 应聘者 xff0c 惯用的暖场问题是 工作中使用过 STL 的哪些组件 xff1f 使用过 Boost 的哪些组件 xff1f 得到的答案大多集中在 vector map 和 shared ptr
  • Visual Studio 中创建带有向导的项目模板

    对于测试开发来说 xff0c 建立新工程的次数要远远高于专职开发人员 由于每次建立一个测试工程都要例行公事的设置一大堆属性 xff0c 例行公事的写一些同样的代码 xff0c 非常耗时 因此打算通过建立项目模板来达到自己完成的目的 比如 x
  • Linux -- Samba之SWAT(Web服务器和CGI脚本应用程序)

    6 6 2 SWAT xff08 1 xff09 SWAT xff08 Samba Web Administration Tool xff0c Samba Web 管理工具 xff09 是一个小规模的Web服务器和CGI脚本应用程序 可以为
  • 关于openstack里instance的mac地址

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 假设你在虚拟机里面的使用ifconfig看到的它自己的mac地址为A xff0c 然后在其他随便一台机器上ssh连接一下这个虚拟机 xff08 连接它的floating i
  • 关于linux终端表述,Linux 终端tty pty pts描述

    在使用Linux的过程中 xff0c 当我们通过ssh或者telnet等方式连接到服务器之后 xff0c 会有一个相应的终端来对应 而在直接登陆到Linux服务器的时候也有一个对应的终端 也就是说所有登陆到当前Linux服务器的用户都有一个
  • 指定的网络名不再可用的解决方法

    2009 06 04 16 40 自己用的一台服务器总是出现 34 指定的网络名不再可用 34 这个问题 用ip来访问总是不成功 在网上找了许多方法也不行后来终于找到解决方法了 原因是两个服务没有启动 第一个是Computer Brower
  • Ubuntu使用VNC运行基于Docker的桌面系统

    2019独角兽企业重金招聘Python工程师标准 gt gt gt docker ubuntu vnc desktop From Docker Index docker pull dorowu ubuntu desktop lxde vnc
  • vncserver Can&#39;t find file /root/.vnc/192.168.1.3:1.pid You&#39;ll have to kill the Xvnc process ...

    CentOS 6 5 修改IP后VNC链接失败 xff0c 提示 xff1a The connection was refused by host computer 尝试删除之前的服务时提示以下信息 xff1a Can 39 t find
  • 国内首个网友可以开发应用的开放式网络操作系统

    国内首个面向电脑爱好者的应用开放平台 X在线电脑 xff0c 提供傻瓜化的网络应用程序开发工具 应用梦工厂 xff0c 让不擅长编程的电脑爱好者们 xff0c 也能开发OA ERP等企业应用 xff0c 并且能快速部署到X在线电脑 X在线电
  • linux多级菜单脚本教程,Linux下使用readline库编程实现多级CLI菜单

    一 背景 CLI是一种快速简洁的人机交互方式 xff0c 优秀的CLI 如 mysql vtysh gdb 带给我们非常好的体验 那么CLI都是如何开发出来的 xff1f 二 相关知识 2 1 CLI vs GUI 文章 1 纵观CLI与G
  • 白盒交换机NOS列表(picos/SnapRoute/ONL)

    WIKI NOS xff1a https en wikipedia org wiki Network operating system Examples JUNOS used in routers and switches from Jun
  • powershell

    常用单行命令 目录 查看当前目录的大小 xff0c 并排序输出 du h max depth 61 1 sort nr 自动选择单位 du m max depth 61 1 sort nr 选择M为单位 转载于 https www cnbl

随机推荐

  • 私有云对企业来说有什么好处

    企业是一个受控集团 xff0c 只有良好的管理 决策 xff0c 一个企业才有成功的希望 xff0c 所以管理在企业中占有重要的地位 私有云的使用是一只无形的手 xff0c 它控制着日常工作中的资源和效率 1 企业拥有基础设施 xff0c
  • JavaScript禁用页面刷新

    JavaScript禁用页面刷新代码如下 xff1a 禁用F5刷新 document onkeydown 61 function if event keyCode 61 61 116 event keyCode 61 0 event can
  • java 整除(/) 求余(%) 运算

    1 java 整除 求余 运算 1 求余 System out println 11 2 顾名思义就是11除2的余数 gt 1 System out println 11 2 结果 gt 1 System out println 11 2
  • C# 解决窗体闪烁

    C 解决窗体闪烁 在Windows窗体上造成 闪烁 的窗体上有很多控制 造成这种闪烁的原因有两个 xff1a 1 当控件需要被绘制时 xff0c Windows发送一个控件两个消息 第一个 xff08 WM ERASEBKGND xff09
  • OVN – OVN OpenStack(二)

    OpenStack networking ovn 项目为Neutron提供了一个基于ML2的OVN插件 xff0c 它使用OVN组件代替了各种Neutron的Python agent xff0c 也不再使用 RabbitMQ xff0c 而
  • 飞秋无法显示局域网好友

    1 飞秋无法显示局域网好友 无法查看网上邻居 无法适用共享打印机的问题是由于开启了 局域网隐身 的缘故 xff0c 打开 360安全卫士 xff1e 功能大全 xff1e 网络优化 xff1e 流量防火墙 xff1e 局域网防护 xff0c
  • pandas 按照某一列进行排序

    pandas排序的方法有很多 xff0c sort values表示根据某一列排序 pd sort values 34 xxx 34 inplace 61 True 表示pd按照xxx这个字段排序 xff0c inplace默认为False
  • 关系数据库和NoSQL结合使用:MySQL + MongoDB

    Home Page 作者使用一个案例来说明MySQL 43 MongoDB结合使用 xff0c 发挥各自所长 xff0c 并且认为他们互补性很强 当然 xff0c 这其中不可避免引入DDD中的编程设计模式 Repository仓储模式 xf
  • 查看网卡信息及状态和网卡日志信息

    查看网卡信息 1 mii tool v w em1 em2 l0 em1 negotiated 100baseTx FD link ok product info vendor 00 aa 00 model 57 rev 1 basic m
  • 筛选出sql 查询结果中 不包含某个字符

    select from table1 where patindex 39 关键字 39 aa 61 0 select from table1 where charindex 39 关键字 39 aa 61 0 select from tab
  • IE8正式版引发VS2005和VS2008添加变量向导出错的解决方案

    1 解决办法1 xff1a 2 卸载IE8 3 解决办法2 xff1a xff08 自己使用的方法 xff09 4 5 打开注册表编辑器 6 7 选择 HKEY CURRENT USER Software Microsoft Windows
  • Visual Studio 2010中文旗舰版+大家所关心的

    下载地址 xff08 VS2010不含MSDN xff09 xff1a http download microsoft com download 2 4 7 24733615 AA11 42E9 8883 E28CDCA88ED5 X16
  • CSS列表

    CSS列表属性可以放置 改变列表项的标志 xff0c 或者将图像作为列表项标志 list style xff1a 简写属性 用于把所有用于列表的属性设置在一个声明中 list style image xff1a 将图像设置为列表项的标志 U
  • Lodash源码讲解-compact函数

    原文首发于Lodash源码讲解 这是我们阅读Lodash源码的第3篇博客 xff0c 在这篇文章里我们来学习一下Lodash的compact方法 compact函数内部没有依赖别的函数 xff0c 让我们先来看一下compact函数的源码
  • CentOS 6.5下Squid代理服务器的安装与配置

    一 系统环境 操作系统 xff1a CentOS release 6 5 Squid版本 xff1a squid 3 1 10 20 el6 5 3 x86 64 SELINUX 61 disabled HTTP Service stope
  • 修改VNCSERVER的分辨率

    使用VNC远程连接时 xff0c 最大化窗口后仍旧在中间显示一个小屏幕 xff0c 并没有随着窗口最大化 xff0c 解决该问题需要首先在VNC窗口标题栏右键 gt Options gt Scaling 选择第二项 xff1a Scale
  • XMLHttpRequest - 原始AJAX初步

    我们知道 xff0c 传统的Web应用是request response形式的 xff0c 即浏览器向服务器发送请求 xff0c 服务器进行处理 xff0c 然后再对浏览器响应 这种形式最大的缺点就是 xff1a 客户端需要等服务器处理完之
  • Python面向对象编程 - 一个记事本程序范例(二)

    给程序加上控制台菜单 menu py import sys from notebook import Notebook Note class Menu 39 39 39 Display a menu and respond to choic
  • 个人代码库の自动粘合桌面边缘

    using System Windows Forms using System namespace public partial class form 必要事件 xff1a No 1 xff1a 窗体的 Move 事件 No 2 xff1a
  • 完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog...

    完全参照系统自带的DatePickerDialog TimePickerDialog的源代码仿写的DateTimePickerDialog 具有同时选择日期 时间的功能 在2 2 2 3平台 xff0c 显示的效果可能会有一个大背景框在后面