Android文本时钟 – Part6

591 查看

前一篇文章里,我们修正了应用小部件外观上的一些小问题。接下来,我们将扩展应用小部件提供一些有关Android新版本的功能,同时兼顾向后兼容性。

我们要做的第一件事情,是将我们的小部件添加到锁屏界面中。Android 4.2版本中引入了添加小部件到锁屏界面功能,实际上实现这个过程非常容易。所有需要做的只是添加几行代码到res/xml/appwidget-info.xml:

所有这些都是4.2版本出现的新功能,老版本对此会完全忽略。因此,无需做任何事情就可以保持软件的向后兼容性。

widgetCategory 属性可以让我们指定将提供哪一种小部件。在示例中,我们提供了一个标准主屏幕小部件,同时一个键盘锁(keyguard)小部件将会添加到锁屏界面。Android 4.2版本设备的默认值是home_screen(主屏幕),因此我们的应用不支持键盘锁属性。

initialKeyguardLayout 属性指定了锁屏界面中使用的布局。一开始,我们使用和主屏幕小部件相同的布局。

如果启动应用,现在可以在锁屏界面下方向左滑动添加锁屏界面小部件。按下“+”按钮,然后从从备选小部件列表中选择文本时钟。

android_textclock_part6_1

添加完成后,我们的锁屏界面看起来像这样:

android_textclock_part6_2

这样就好了。但是时间的边框显示得不够好,因此我们应该让它变得更大一些。事实上,我们不需要像在主屏幕上那样将它同其它部件分开,因此可以去除所有的背景。我们会在res/layout/keyguard.xml中定义一个分离的布局

这里同时需要添加一些新的样式:

如果设备支持,我们希望使用“Roboto Light”,因此我们需要改变res/values-v16/styles.xml的内容:

我们还需要改变res/xml/appwidget-info.xml的内容应用这个新布局:

对每一个小部件实例,我们可以从 AppWidgetManager 中获得的 AppWidgetOptions Bundle 确定它的类型。默认类型是1(代表一个主屏幕小部件)。我们可以使用常量 AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD 改进代码的可读性,而不是使用魔数2来表示 WIDGET_CATEGORY_KEYGUARD 常量。实际上这会破坏向后兼容性,因为 Android 常量是从 API 17 才开始引入,如果这样做会在更早版本的环境上运行时会发生错误。

再次运行,就可以在锁屏界面中看到新布局:

android_textclock_part6_3

现在我们有了一个锁屏界面小部件,它支持Android 4.2及以后版本的设备。应用的这个版本可以在Google Play市场上找到对应的1.1.0版本。

下一篇文章里我们要学习用Android 4.2的另一个新特性来扩展应用。

本文的代码可以从这里获取,TextClock应用可以从Google Play下载。