Android文字時鐘 – Part6

Terry發表於2014-02-21

前一篇文章裡,我們修正了應用小部件外觀上的一些小問題。接下來,我們將擴充套件應用小部件提供一些有關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下載。

相關文章