您的位置:首页 > 移动开发 > Android开发

Android开发:日期控件的使用(二)

2012-04-23 20:51 471 查看
【转载】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
ChronometercmCM;
1.2在OnCreate中班实例化定时器

1
cmCM=(Chronometer)findViewById(R.id.chronometer1);
1.3重载OnDialogCreate函数

1
@Override
2
protected
DialogonCreateDialog(
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.OnDateSetListenerddSetDateListener=
new
DatePickerDialog.OnDateSetListener(){
02
public

void
onDateSet(DatePickerview,

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
OnClickListenerlistener;
03
private
TextViewtxtCD;
04
//定义:
05
listener=
new

OnClickListener(){
06
public

void
onClick(Viewv)
07
{
//TODOAuto-generatedmethodstub
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
TextViewtxtST;
2.2实例化并设置单击事件的监听器

1
txtST=(TextView)findViewById(R.id.txtSetTime);
2
txtST.setOnClickListener(listener);
2.3创建TimePicker对话框,这里修改之前重载的protectedDialogonCreateDialog(intid)函数,如下:

01
@Override
02
protected
DialogonCreateDialog(
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.OnTimeSetListenerttSetTimeListener=
new
TimePickerDialog.OnTimeSetListener(){
02
@Override
03
public

void
onTimeSet(TimePickerview,

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.OnTimeSetListenercallBack,inthourOfDay,intminute,booleanis24HourView)中,最后一个bool值设为true代表使用24小时制。


3.显示时间与设定时间相同时闪烁“小闹钟”TextView的背景颜色。


这里主要用到我们设置的计时器,用计时器的OnChronometerTickListener监听器,即在计时器内容发生变化时响应,相当于其他语言中的OnTimer函数。

为了方便陈述,这里只做时间计时,即设闹钟为每天都在该设定时间时闪烁。

01
//声明并初始化:
02
private
OnChronometerTickListeneroclistener;
03
static
private

int
color;
//用来存储颜色
04
private
Timesrct,nowt;
//srct表示设定的时间,nowt是当前时间
05
color=Color.BLUE;
06
07
//实现OnChronometerTickListener的onChronometerTick(Chronometerarg0)方法:
08
oclistener=
new

OnChronometerTickListener(){
09
@Override
10
public
void

onChronometerTick(Chronometerarg0){
11
//TODOAuto-generatedmethodstub
12
final

Calendarmycalendar=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
TextViewtxtTitle=(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开发,
日期控件高级使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: