Android文本时钟 — Part1,androidpart1
Android文本时钟 — Part1,androidpart1
通常在做Android样式(Styling)时,我们会聚焦于个性化、独立的功能以及Android UI/UX开发技术上。这个系列课程将创建一个简单的应用程序,并发布到Google Play上。这个过程必然会涉及到一些之前没见过的功能和技术点,也会涉及到一些Android 4.2 新特性,与此同时我们也可以看到一些设计理念——尽可能简化应用程序,为其进入市场做好准备。
那么,我们将创建怎样的一个应用程序呢?一个简单的文本时钟小程序。这个想法来源于一个定制的Pebble表,并且我们会在Android上用Holo风格呈现现这个文本时钟。而这个应用程序的初始版本将会是一个能让用户安装在他们手机 home 页上的桌面小程序:
随着学习的进行,发布在Google Play上的文本时钟也会跟着这个教程发布的最新文章同步更新。
我们需要做的第一件事情:创建一个 com.stylingandroid.textclock 包,在目录下创建一个名为 “TextClock” 的Android 4.2 工程文件。个工程文件不包含 Activity —— 后面会添加,目前暂不需要。
接下来,我们看一下文本时间生成类:
public class TimeToWords { public static final String[] UNITS = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; public static final String[] TENS = {"zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; public static final String[] TEENS = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; private static final StringBuilder builder = new StringBuilder(); public synchronized static String[] timeToWords(Calendar date) { builder.setLength(0); int h = date.get(Calendar.HOUR_OF_DAY); int m = date.get(Calendar.MINUTE); if (h == 0) { builder.append("midnight"); } else { toWords(h, builder, false, " "); } if (m == 0) { if (h > 0) { builder.append(":o'clock"); } } else { builder.append(":"); toWords(m, builder, true, ":"); } return builder.toString().split(":"); } private static void toWords(final int number, StringBuilder sb, boolean leadingZero, String separator) { int num = number; int tens = num / 10; if (leadingZero || tens > 0) { if (tens == 1) { sb.append(TEENS[num - 10]); num = 0; } else { sb.append(TENS[tens]); } } int units = num % 10; if (units > 0) { if (sb.length() > 0) { sb.append(separator); } sb.append(UNITS[units]); } } }
在这里有一些东西需要解释:首先,方法是静态的,所以无需实例化 TimeToWords 对象;它使用了一个静态 SringBuilder 成员,这样在调用 timeTowords() 方法的时可以创建最少的对象。当然,这个方法也有个潜在的问题:如果timeToWords() 方法同时被不同的线程调用,使用同一个 StringBuilder 会出现问题。因此,我们把 timeToWords() 方法声明为synchronized,这样可以确保它一次只能被一个线程调用。希望随着app开发的进行,这种情况不发生。尽管如此,时刻考虑线程安全问题可以防止程序出现预期之外的执行结果。
这里,我们仅仅专注于实现一个24小时标准时钟,但以后也会弄一个12小时标准时钟。在应用中,我们将创建一个包含时间的文本字符串,然后采用 “:” 作为分割符把它分割成不同部分,并以一个字符串数组返回。我们仅用三行显示,但可能在某些环境下会有超过三个需要识别的文字(如“ twenty one fifty five“)。这时我们会把“小时”列为一行(”twenty one”)、“分钟”列两行(“fifty”、“five”)。当然也还有些边界情况,如零点(这里我们把它显示为“midnight”)、零分(这里我们把它显示为整点,如seven o’clock)。
应用程序的主要“引擎”就是实现后台所有的业务逻辑。这个非常简单,所以我们可以专注于UI(呈现给用户的东西)开发。
在下一篇文章,我们将开始讲述如何实现这个能让用户放在其手机 home 页的桌面小程序。
本文的源码在这里,并且你也可以在Google Play上找到此文本时钟应用。
原文链接: stylingandroid 翻译: Wld5.com - 余炬鹏译文链接: http://www.wld5.com/8587.html
[ 转载请保留原文出处、译者和译文链接。]
用户点评