Android开发:日期控件的使用(二)
来源:互联网 发布:音轨对比软件 编辑:程序博客网 时间:2024/06/05 03:52
【转载】http://www.androidwhy.com/android_14_58_zh.html
Android开发:日期控件的使用(二)
问题提出
在上一教程文章Android开发:日期控件的使用(一)中,我们android开发的布局已经敲定,系统时间也已经显示在指定位置了,那么另两个功能该怎么实现呢,它们都用到什么了呢?
问题分析
本文将使用DatePicker和TimePicker完成时间的选择,并启动Chronometer。这样当我们设定的时间和当前时间相等时(分、时相等),小闹钟就开始动作,闪烁标题背景颜色。
问题解决
一、现在明确下本文要完成的功能:
- 当单击设置时间后的显示日期的TextView将弹出DatePicker,并将设置好的时间赋给显示日期的TextView,同时启动计时器。
- 当单击设置时间后的显示时间的TextView将弹出TimePicker,并将设置好的时间赋给显示时间的TextView,同时启动计时器。
- 显示时间与设定时间相同时闪烁“小闹钟”TextView的背景颜色。
二、功能实现
1. 当单击设置时间后的显示日期的TextView将弹出DatePicker,并将设置好的时间赋给显示日期的TextView,同时启动计时器。
这个功能,我们可以拆分成三部分,一个是单击事件、一个是DatePicker对话框的创建、还有一个就是计时器的启动
单击事件很简单,就是使用之前说过的OnClickListener,弹出对话框相对麻烦些。
1.1 定义对话框标签和计时器变量
1
static
final
int
DATE_DIALOG_ID =
0
;
2
private
Chronometer cmCM;
1.2在OnCreate中班实例化定时器
1
cmCM = (Chronometer)findViewById(R.id.chronometer1);
1.3重载OnDialogCreate函数
1
@Override
2
protected
Dialog onCreateDialog(
int
id) {
3
switch
(id) {
4
case
DATE_DIALOG_ID:
5
return
new
DatePickerDialog(
this
,
6
ddSetDateListener, intYear, intMonth, intDay);
7
}
8
return
null
;
9
}
其中 ddSetDateListener是我们定义的单击DataPicker的设置按钮后的监听器,即按下DataPicker的“设置”按钮后需要做的事情——设置TextView的值和启动计时器,其定义如下:
01
private
DatePickerDialog.OnDateSetListener ddSetDateListener =
new
DatePickerDialog.OnDateSetListener() {
02
public
void
onDateSet(DatePicker view,
int
year,
int
monthOfYear,
int
dayOfMonth) {
03
intYear = year;
04
intMonth = monthOfYear;
05
intDay = dayOfMonth;
06
txtSD.setText(
07
new
StringBuilder()
08
.append(intYear).append(
"年"
)
09
.append(intMonth +
1
).append(
"月"
)
10
.append(intDay).append(
"日"
));
// 设置TextView的值
11
// 启动定时器
12
cmCM.setBase(SystemClock.elapsedRealtime());
// 从当前时间开始计时
13
cmCM.setFormat(
"计时: %s"
);
// 时间格式
14
cmCM.start();
// 开始计时
15
}
16
};
1.4设置单击事件
完成以上工作后,就可以设置TextView的单击响应了,因为之后显示时间的TextView也有单击响应,所以这里定义一个Listener,处理这两个单击动作。声明与定义及使用如下:
01
//声明:
02
private
OnClickListener listener;
03
private
TextView txtCD;
04
//定义:
05
listener =
new
OnClickListener(){
06
public
void
onClick(View v)
07
{
// TODO Auto-generated method stub
08
09
if
(v.getId() == R.id.txtSetDate)
10
{
11
showDialog(DATE_DIALOG_ID);
12
}
13
else
if
(v.getId() == R.id.txtSetTime)
14
{
15
showDialog(TIME_DIALOG_ID);
16
}
17
}};
18
txtSD = (TextView)findViewById(R.id.txtSetDate);
19
//使用:
20
txtSD.setOnClickListener(listener);
效果如图:
2. 当单击设置时间后的显示时间的TextView将弹出TimePicker,并将设置好的时间赋给显示时间的TextView,同时启动计时器这个与DatePicker用法差不多,这里不再详细讲,直接给出相关代码如下:
2.1对话框标签及TextView变量定义
1
static
final
int
TIME_DIALOG_ID =
1
;
2
private
TextView txtST;
2.2实例化并设置单击事件的监听器
1
txtST = (TextView)findViewById(R.id.txtSetTime);
2
txtST.setOnClickListener(listener);
2.3创建TimePicker对话框,这里修改之前重载的protected Dialog onCreateDialog(int id)函数,如下:
01
@Override
02
protected
Dialog onCreateDialog(
int
id) {
03
switch
(id) {
04
case
DATE_DIALOG_ID:
05
return
new
DatePickerDialog(
this
, ddSetDateListener,
06
intYear, intMonth, intDay);
07
case
TIME_DIALOG_ID:
08
return
new
TimePickerDialog(
this
,
09
ttSetTimeListener,intHour,intMinute,
true
);
10
}
11
return
null
;}
2.4设置OnTimeSetListener用来响应单击TimePicker对话框中“设置”按钮
01
private
TimePickerDialog.OnTimeSetListener ttSetTimeListener =
new
TimePickerDialog.OnTimeSetListener(){
02
@Override
03
public
void
onTimeSet(TimePicker view,
int
hourOfDay,
int
minute) {
04
intHour = hourOfDay;
05
intMinute = minute;
06
txtST.setText(
new
StringBuilder()
07
.append(intHour<
10
?(
"0"
+intHour):intHour).append(
" : "
)
08
.append(intMinute<
10
?(
"0"
+intMinute):intMinute).append(
" : 00"
));
09
cmCM.setBase(SystemClock.elapsedRealtime());
10
cmCM.setFormat(
"计时: %s"
);
11
cmCM.start();}};
这样,我们定时功能就完成了,这里要注意的是,TimePicker只有小时和分钟,在构造函数TimePickerDialog(Context context, TimePickerDialog.OnTimeSetListener callBack, inthourOfDay, int minute, boolean is24HourView)中,最后一个bool值设为true代表使用24小时制。
3.显示时间与设定时间相同时闪烁“小闹钟”TextView的背景颜色。
这里主要用到我们设置的计时器,用计时器的OnChronometerTickListener监听器,即在计时器内容发生变化时响应,相当于其他语言中的OnTimer函数。
为了方便陈述,这里只做时间计时,即设闹钟为每天都在该设定时间时闪烁。
01
//声明并初始化:
02
private
OnChronometerTickListener oclistener;
03
static
private
int
color;
// 用来存储颜色
04
private
Time srct,nowt;
// srct表示设定的时间,nowt是当前时间
05
color = Color.BLUE;
06
07
//实现OnChronometerTickListener的onChronometerTick(Chronometer arg0)方法:
08
oclistener =
new
OnChronometerTickListener(){
09
@Override
10
public
void
onChronometerTick(Chronometer arg0) {
11
// TODO Auto-generated method stub
12
final
Calendar mycalendar = Calendar.getInstance();
// 实例化日历
13
intYear = mycalendar.get(Calendar.YEAR);
// 获取“年”
14
intMonth = mycalendar.get(Calendar.MONTH);
// 获取“月”
15
intDay = mycalendar.get(Calendar.DAY_OF_MONTH);
// 获取“日”
16
17
nowt =
new
Time();
18
srct =
new
Time();
19
20
nowt.setToNow();
// 设置当前时间
21
srct.set(
0
, intMinute, intHour, intDay, intMonth, intYear);
// 设置为设定的时间
22
// 设置背景颜色
23
if
(nowt.hour==srct.hour&& nowt.minute == srct.minute)
24
{
25
TextView txtTitle = (TextView)findViewById(R.id.txtTitle);
26
txtTitle.setBackgroundColor(color);
27
if
(color == Color.BLUE)
28
{
29
color = Color.YELLOW;
30
}
31
else
32
{
33
color = Color.BLUE;
34
}
35
}
36
}};
最终效果:
问题总结
在本文的android开发教程中我们简单的演示了时间拾取器TimePicker、日期拾取器DatePicker、计时器Chronometer、模拟时钟AnologClock和数字时钟DigitalClock的使用。当然本文的小例子旨在抛砖引玉,让大家了解Android中,那些和时间有关的东西。
对于计时器Chronometer,本例未涉及到的,但也常用的方法还有stop();该方法相当于暂停,在使用该方法后再使用start()方法,计时器将从停止那刻继续计时。如果想要计时器在停止后重新启动时从零开始计时就需要加上cmCM.setBase(SystemClock.elapsedRealtime());用以归零。
这个简单的android开发例子,希望对大家有点启发,从而创作出更加美观、功能更加强劲的时钟软件来。本教程及上一教程的代码在附件位置可以下载,有需要的朋友可以直接下载。
附件: EXP03.zip
标签: android开发,日期控件高级使用
- Android开发:日期控件的使用(二)
- Android开发:日期控件的使用(一)
- Android开发:日期控件的使用(一)
- 【Android 开发】:UI控件之时间和日期对话框控件的的使用(四)
- 【Android 开发】:UI控件之 DatePicker 输入日期控件的使用
- android 时间日期控件的使用
- 【Android 开发】:UI控件之 ViewPager 多页面滑动效果控件的的使用(二)
- 【Android 开发】:UI控件之 AlertDialog 对话框控件的的使用(二)
- 【Android 开发】:UI控件之 ListView 列表控件的使用(二)
- 日期控件的使用
- 日期控件的使用
- 日期控件二的实现
- Android开发全程记录(五)——使用日期选择控件
- Android 日期控件(DatePickerDialog)与时间控件(TimePickerDialog)的使用
- Android开发:Handler的使用(二)
- Android开发之日期选择器的使用
- 日期控件的使用(Datepicker Widget)
- Webdnpro UI控件开发篇 Table控件使用二(每行使用不同的颜色)
- Mysql导入数据
- 解决 Toast 长时间轮流显示问题
- 很牛的求职经验
- 如何降低运放电路中的电源噪声
- 如何安装jdk6
- Android开发:日期控件的使用(二)
- MFC Radio Button
- wifi 未完成
- 【Oracle】Oracle 细节注意笔记
- class 'org.springframework.orm.hibernate3.LocalSessionFactoryBean' not found解决方法
- 流水灯循环左移点亮
- android Broadcast 生命周期详细分析
- mini6410基于linux2.6.36内核制作initramfs文件系统
- 很炫的Adobe Flex的展示案例地址