App Widget也是一種UI組件,它可以讓一小塊程序(program piece)嵌入到桌面上。與普通的Widget(TextView、WebView等)相比,有以下幾個不同:
- App Widget是有生命的UI組件,它會自動更新自身內容;
- Widget不能自動更新自身內容,只能被動的等待用戶的調用;
應用上,由於App Widget自動更新的特性,所以它比較適合用來設計一些天氣,新聞,日歷等功能。
App Widget的設計流程:
- 規劃App Widget的大小及更新時間,在/res/xml目錄新增一份XML文件;
- 規劃App Widget的UI,修改res/layout/main.xml;
- 編寫App Widget的主程序;
- 編輯AndroidManifest.xml,設定App Widget可接受App Widget的更新事件:android.appwidget.action.APPWIDGET_UPDATE
及設計一個App Widget至少需要以下4個文件:
- res/xml/appwidget_provider.xml
- res/layout/main.xml
- src//HelloAppWidgetProvider.java
- AndroidManifest.xml
下面是一個具體實現App Widget的例子:
新建一個Android工程HelloAppWidget,在/res目錄新建一個文件夾xml,在/res/xml目錄下新建一個appwidget_provider.xml文件:
- <?xml version="1.0" encoding="utf-8"?>
-
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="85dp"
- android:minHeight="30dp"
- android:updatePeriodMillis="1000"
- android:initialLayout="@layout/main"
- >
- </appwidget-provider>
說明如下:
- <appwidget-provider>標簽定義App Widget的屬性
- android:minWidth 寬度
- android:minHeight 長度
- android:updatePeriodMillis定義App Widget的更新頻率,Android框架每隔一段時間,會callback AppWidgetProvider類的onUpdate()事件;以前android的版本設定為1毫秒為單位,現在版本為了省電,更新時間為30~60分鐘,所以現在設定30分鐘以內的更新意義不大,系統默認為30~60分鐘更新
- android:initialLayout屬性指定此App Widget的UI layout定義,”@”符號在Android的XML定義檔案,代表「目錄」之意,因此”@layout/main”表示「layout目錄下的main.xml檔案」
為了界面美觀,google提供了App Widget的外觀設計原則,以下是官方提供的設計參考: