目前网上流行着很多对“时间对话框TimePickerDialog”的讲解文章,但感觉都不是很详细。这里详细对该方面的知识进行介绍,旨在帮助初学者能够快速掌握该项技术。

首先要做的是声明一个日历类的对象:

private Calendar c;

然后对其进行实例化:

c = Calendar.getInstance();

实例化后便可以对该日历对象进行操作了,如c.get方法可以获得该日历对象中的相关变量(如年、月、日、时、分、秒等),这些变量的值在实例化“c = Calendar.getInstance();”时已经被设置为系统默认时间;利用c.set方法可以对日历对象的相关变量进行设置。

日历对象还有一个重要的方法是setTimeInMillis,该方法只有一个参数,即距离1970年1月1日0时的毫秒数,调用这个方法,则会根据你传入的毫秒数对日历对象中的变量进行相应设置,如果想设置为当前的系统时间,则用以下方式:“c.setTimeInMillis(System.currentTimeMillis());”

介绍完日历类相关知识后进入正题,即时间对话框的开发。给出如下实例代码,其中红色部分为弹出对话框的按钮监听代码;蓝色代码为设置日历对象代码;剩下的便是时间对话框代码。

final ImageButton time = (ImageButton) findViewById(R.id.time);

time.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View view){

c.setTimeInMillis(System.currentTimeMillis());

int hour = c.get(Calendar.HOUR_OF_DAY);

int minute = c.get(Calendar.MINUTE);

new TimePickerDialog(MenuView.this,new OnTimeSetListener() {

@Override

public void onTimeSet(TimePicker view,inthourOfDay,int minute)

{

c.setTimeInMillis(System.currentTimeMillis());

c.set(Calendar.HOUR_OF_DAY,hourOfDay);

c.set(Calendar.MINUTE, minute);

c.set(Calendar.SECOND, 0);

c.set(Calendar.MILLISECOND, 0);

}

}, hour, minute, true).show();

}

});

TimePickerDialog方法有五个参数,第一个参数(MenuView.this)为弹出的时间对话框所在的activity指针;第二个参数我们最后说;第三个参数(hour)和第四个参数(minute)为弹出的时间对话框的初始显示的小时和分钟,这两个变量在蓝色代码中进行初始化;第五个参数为设置24时显示参数,true代表时间以24时制显示时间。

下面回过头来说第二个参数,首先我们要了解一下时间对话框的样式,如下图所示:

点击“+”标题处和方框中的数字会同时增加,同理点击“-”则数字以1递减。对话框有两个button,点击“Cancel”按钮后没有任何操作,而如果点击了“Set”按钮,则会执行onTimeSet方法中的代码(橘黄色)。

所以根据示例代码的逻辑,点击弹出时间对话框的按钮后,显示的是系统当前时间,调整好时间后点击Set按钮,日历对象的时间变量改为设置的时间。但是再次点击弹出时间对话框按钮后,显示的仍是系统当前时间(蓝色代码中的c.setTimeInMillis(System.currentTimeMillis());)。当然,如果想在程序退出后记录上一次设置的时间值,可以考虑使用轻量级数据库Preferences相关知识解决。

以上就是时间对话框TimePickerDialog的相关知识,当然Android也有日期对话框DatePickerDialog,两者的原理都是相通的,在这里就不再赘述了

Android时间对话框TimePickerDialog介绍的更多相关文章

  1. android 时间对话框 TimePickerDialog简介

     个人也提醒功能的时候用到了TimePickerDialog对话框,查阅了非常多技术资料,可是感觉非常多东西都说的不是非常具体,而且非常多地方.都有不完好的地方.比方有弹出对话框得到的不是系统当前 ...

  2. Android 时间对话框 TimePickerDialog

    private int hourOfDay, minute; @Override protected void onCreate(Bundle savedInstanceState) { super. ...

  3. 日期对话框(DatePickerDialog)和时间对话框(TimePickerDialog)

    效果图 布局 <Button android:id="@+id/btn_date" android:text="弹出日期选择对话框" android:la ...

  4. Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影

    效果图: 1.activity_main.xml 描述: a.定义了一个消息提示框按钮 点击按钮弹出消息 b.定义了一个选择城市的输入框 点击按钮选择城市 c.定义了一个单选提示框按钮 点击按钮选择某 ...

  5. Android——对话框2(日期和时间对话框)

    xml <Button android:layout_width="match_parent" android:layout_height="wrap_conten ...

  6. android 开发DatePickerDialog/TimePickerDialog对话框的实现

    AndroidAPI提供了Dialog对话框控件,DatePickerDialog/TimePickerDialog均是AlertDialog的子类,通过DatePickerDialog/TimePi ...

  7. Android(对话框)

    一.消息对话框 所谓的消息对话框,就是说当你点击按钮弹框,它会弹出一个消息提示你,消息对话框有相应的确定.取消.其他按钮,比如下方: 代码: //消息提示框 public void testOne(V ...

  8. Android 日期对话框DatePickerDialog

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@ ...

  9. Android日期对话框NumberPicker的使用方法教程

    NumberPicker是Android3.0之后引入的一个控件.NumberPicker 是用于选择一组提前定义好数字的控件.比方时间hour的选择仅仅有0-23有效,则能够通过setMinValu ...

随机推荐

  1. POJ 3257 DP

    题意: 思路: 用vector存上本出发点能到的地方&成本&有趣指数(用结构体保存) 然后DP就好了 f[i][j]表示到了i 成本为j的有趣指数最大是多少 f[vec[i][k].e ...

  2. 解决Esxi5下安装Windows 8的问题

    在VM8工作站版下安装windows 8没有问题,可是到了Esxi5下,非得安装补丁不可.补丁下载地址: http://kb.vmware.com/selfservice/microsites/sea ...

  3. lslpp 总结

    lslpp action 字段状态值: APPLY应用文件集 CLEANUP清理文件集进行 COMMIT提交文件集 REJECT拒绝指定文件集     status 字段状态值: 标识安装操作历史记录 ...

  4. Copying GC (Part one)

    目录 GC复制算法 copy()函数 将传递给自己的参数复制,然后递归复制其孩子 new_obj()函数 执行过程 缺点 Cheney的GC复制算法 copy()函数 执行过程 被隐藏的队列 优缺点 ...

  5. Git学习总结(5)——搭建Git简易高效服务器

    1. mysysgit+gitblit安装流程 1.1资源  需先下载好的资源(公司用的1.6,1.7+请自行匹配对应的mysysgit+gitblit):  jdk1.6  Git-1.8.4-pr ...

  6. codevs 1019 集合论与图论

    1019 集合论与图论  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 集合论与图论对于小松来说 ...

  7. HDU 2886 Lou 1 Zhuang

    思维好重要.. 对于n+m == k , 当n == m || abs(n-m) == 1 时n*m取得最大值. 设 s = x*(l-x),s = lx-x^2.其导函数为 s' = -1/2x + ...

  8. Js经典实例收集

    跨浏览器添加事件 //跨浏览器添加事件 function addEvent(obj,type,fn){ if(obj.addEventListener){ obj.addEventListener(t ...

  9. 项目: 更新(二) python 实现大概FTP的功能

    服务器利用 socketserver 模块 构造, 实现了 多进程. 客户端仍然利用的是底层的 socket模块. 只不过进行了更深度的 解耦, 新加或者删除 某些功能 更方便 在上一个版本的基础上, ...

  10. Kinect 开发 —— Hello,Kinect

    控制台输出深度数据: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...