Android Widget 開發流程

Android - Widget

Android Widget 開發流程。

Widget 觀念

widget就是在Home Screen顯示的元件,它只是View的一種,所以可以使用xml來設計layout。你可以設計一個在背景執行的Service,讓它定時去Update這個Widget。此外畫面的設計可以參考Dev手冊中的說明,尺寸的設計則有一個公式最小尺寸(dip) = (格子數 * 74) - 2。所謂的格子是指,Home Screen中劃分成4*4的格子,所以你的widget要佔滿幾個格子,就可以用這個公式去算出你的widget的尺寸,例如,要佔滿2格,就是(2*74)-2=146dip。

開發流程

  1. AppWidgetProviderInfo:描述App Widget的metadata。
  2. 實作AppWidgetProvider:接收並處理廣播事件,例如OnUpdate()。
  3. View Layout:設計widget所要呈現的UI。
  4. Configuration Activity:非必要。
  5. 設定AndroidManifest檔。

AppWidgetProviderInfo

在 /res 下增加一個 xml 目錄。然後增加一個 xml 檔,Eclipse 中的做法:在 xml 目錄上按右鍵→New→Android XML File→選擇"AppWidget Provider"→打入檔名。

AppWidgetProviderInfo XML檔的目的,是要描述這個Widget的尺寸、更新的頻率、Layout及非必要的Configuration Activity設定。

請設定其寬及高的尺寸(依之前介紹的公式),然後你必須新增一個Layout用的xml,放在/layout目錄中,並在此設定選擇這個Layout檔。更新頻率是以毫秒計,所以1000表示1秒更新一次。手冊上是建議不要太頻繁,以免太耗電。

實作AppWidgetProvider

新增一個類別,並繼承AppWidgetProvider,然後覆寫onUpdate()方法。通常會在其中啟動Service來做想要做的事。這裡要知道兩個類別:AppWidgetManager及RemoteViews。

RemoteViews是用來更新widget的顯示畫面,例如:RemoteViews有一個setTextViewText()的方法,可以設定Widget中的TextView。它會傳入widget中的TextView的Id,及要顯示的字串,等同於呼叫那個Vidw的setText()方法,來設定文字。

AppWidgetManager則是用來把你的AppWidgetProvider和RemoteViews做連結。

View Layout

設計widget所要呈現的UI。

Configuration Activity

這是非必要的。如果你希望使用者在加入Widget到Home Screen之前要先做一些設定的話,可以增加一個Activity來執行,它會在widget加入到Home Screen之前先跳出來。

設定AndroidManifest檔

因為AppWidgetProvider類別是BroadcastReceiver的子類別,所以在<application>元素內增加一個<receiver>指定到2.2所建的自定AppWidgetProvider。在其中增加一個Intent filter來抓取 android.appwidget.action.APPWIDGET_UPDATE 的Action。

在<receiver>下再新增一個<meta-data>名為"android.appwidget.provider",resource則是設定為/xml目錄下的AppWidgetProviderInfo XML檔。

接著,不要忘記為你的Service或Activity做設定。

結語

以上是整個Widget的開發流程中要注意的事項,如果搭配一個"飯粒",想必你就能瞭解。下面的參考資料中有個"How to ......"的連結,裡面有個Widget教學,你可以去下載它的範例,另外,Android SDK中的API Demo中也有。

參考資料:

本文網址:http://blog.tonycube.com/2009/12/android-widget.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。