关于时间,无外乎三种类型:日期、时刻、计时。在Android SDK中提供了五种时间相关的控件:时间拾取器TimePicker、日期拾取器DatePicker、计时器Chronometer、模拟时钟AnologClock和数字时钟DigitalClock。接下去的
问题解决
本例包含一个AnologClock、一个DigitalClock、一个Chronometer、若干个TextView,而TimePicker和DatePicker将以弹出窗口形式出现。本例演示如下四个功能:
- 在DigitalClock上方的TextView上显示当前系统日期。
- 当单击设置时间后的显示日期的TextView将弹出DatePicker,并将设置好的时间赋给显示日期的TextView,同时启动计时器。
- 当单击设置时间后的显示时间的TextView将弹出TimePicker,并将设置好的时间赋给显示时间的TextView,同时启动计时器。
- 显示时间与设定时间相同时闪烁“小闹钟”TextView的背景颜色。
本文先介绍布局与如何得到系统时间基本思路清楚了,那就让我们现在开始动手做下吧。
一、打开Eclipse,建立一个Android工程,属性如下:
Project name:Exp03
Build Target:Android2.2
PacketName:com.Exp03
二、布置控件。
在main.xml中添加一个TextView、两个EditView和两个Button控件,部分属性如下:
控件类型 | 控件id | 用途 |
TextView | @+id/txtTitle | 程序标题,到点后闪烁背景 |
TextView | @+id/txtCurrentDate | 显示当前日期 |
TextView | @+id/txtSetDate | 设置和显示设置的日期 |
TextView | @+id/txtSetTime | 设置和显示设置的时间 |
AnologClock | @+id/analogClock1 | 模拟时钟,显示当前时间 |
DigitalClock | @+id/digitalClock1 | 数字时钟,显示当前时间 |
Chronometer | @+id/chronometer1 | 计时器 |
main.xml文件如下:
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
03 | android:layout_width = "fill_parent" |
04 | android:layout_height = "fill_parent" |
05 | android:orientation = "vertical" > |
08 | android:id = "@+id/txtTitle" |
09 | android:layout_width = "fill_parent" |
10 | android:layout_height = "wrap_content" |
12 | android:textSize = "20dp" |
13 | android:background = "@color/gray" /> |
15 | android:layout_width = "fill_parent" |
16 | android:layout_height = "wrap_content" |
17 | android:orientation = "horizontal" >" |
20 | android:id = "@+id/analogClock1" |
21 | android:layout_width = "wrap_content" |
22 | android:layout_height = "wrap_content" /> |
25 | android:id = "@+id/linearLayout2" |
26 | android:layout_width = "match_parent" |
27 | android:layout_height = "match_parent" |
28 | android:orientation = "vertical" > |
31 | android:id = "@+id/txtCurrentDate" |
32 | android:layout_width = "match_parent" |
33 | android:layout_height = "wrap_content" |
34 | android:text = "现在是:2011年10月23日" |
35 | android:textAppearance = "?android:attr/textAppearanceSmall" /> |
38 | android:id = "@+id/digitalClock1" |
39 | android:layout_width = "match_parent" |
40 | android:layout_height = "fill_parent" |
41 | android:layout_weight = "1" |
42 | android:gravity = "center" |
43 | android:text = "DigitalClock" |
44 | android:textSize = "15dp" /> |
49 | android:layout_width = "fill_parent" |
50 | android:layout_height = "wrap_content" |
51 | android:orientation = "horizontal" > |
54 | android:layout_width = "100dp" |
55 | android:layout_height = "wrap_content" |
56 | android:background = "@color/gray" |
58 | android:textSize = "15dp" /> |
61 | android:id = "@+id/txtSetDate" |
62 | android:layout_width = "130dp" |
63 | android:layout_height = "wrap_content" |
64 | android:background = "@color/gray" |
65 | android:text = "2011年10月21日" |
66 | android:textSize = "15dp" /> |
69 | android:id = "@+id/txtSetTime" |
70 | android:layout_width = "fill_parent" |
71 | android:layout_height = "wrap_content" |
72 | android:text = "00:00:00" |
73 | android:textSize = "15dp" |
74 | android:layout_weight = "1" |
75 | android:background = "@color/gray" /> |
78 | android:id = "@+id/linearLayout1" |
79 | android:layout_width = "match_parent" |
80 | android:layout_height = "wrap_content" |
81 | android:layout_marginTop = "5dp" |
82 | android:background = "@color/gray" |
85 | android:id = "@+id/chronometer1" |
86 | android:layout_width = "wrap_content" |
87 | android:layout_height = "wrap_content" |
88 | android:layout_weight = "10" |
89 | android:gravity = "center" |
90 | android:format = "H:MM:SS" /> |
效果如图:
![日期控件的使用 日期控件的使用](https://i-blog.csdnimg.cn/blog_migrate/ee811752e906c6d693331db50260cf41.png)
控件属性简介:
1. AnologClock
1.1 Handhour
时针,可以指定时针图片,设置时针形状,这里使用默认时针
1.2 Handminute
分针,可以指定分针图片,设置分针形状,这里使用默认分针
可能出于省电的考虑,模拟时钟并没有提供秒针,这有点美中不足。
2. Chronometer
Format:这是用来指定时间显示格式的字符串,与C++中的CString的Format类似,指定格式为“MM:SS”或“H:MM:SS”,那么计时器将用指定格式替换显示字符串中的第一个%s。
三、功能实现
模拟时钟和数字时钟添加进来了后,在程序运行时就能自动获取系统时间,也就是说无需额外代码,它们就能工作了。
现在来实现其他功能。
1. 获取系统日期显示在id为txtCurrentDate的TextView上
获取系统时间,用到的是java. util.Calendar组件,这个日历组件比较强大,不仅可以得到系统日期,还可以得到系统时间、星期等。这里我们只获取当时的日期。
02 | private int intYear,intMonth,intDay; |
03 | private TextView txtCD; |
05 | txtCD = (TextView)findViewById(R.id.txtCurrentDate); |
08 | private void settxtCurrentDate() |
10 | final Calendar mycalendar = Calendar.getInstance(); |
11 | intYear = mycalendar.get(Calendar.YEAR); |
12 | intMonth = mycalendar.get(Calendar.MONTH); |
13 | intDay = mycalendar.get(Calendar.DAY_OF_MONTH); |
16 | .append(intYear).append( "年" ) |
17 | .append(intMonth + 1 ).append( "月" ) |
18 | .append(intDay).append( "日" )); |
由于获取的月数是从0开始计数的,所以需要加1。
在OnCreate中使用这个函数:
1 | <strong>settxtCurrentDate();</strong> |
这样我们在程序运行时就能够在程序启动时显示当下系统的时间了,并在任何需要刷新日期显示的时候,调用这个函数即可刷新日期显示。
问题总结
在本文中我们完成了android开发中时间拾取器TimePicker、日期拾取器DatePicker、计时器Chronometer、模拟时钟AnologClock和数字时钟DigitalClock的布局。以及如何获取系统时间。获取系统时间用到的是java. util.Calendar的get方法依次获取年月日值,用StringBuilder()类的append()方法将字符串连接在一起。在下一篇文章中我们将完成剩下的两个功能。