設計一個Widget基本上只需要下四個設計及可運作
► AppWidgetProviderInfo(xml\appwidget_info.xml):描述App Widget的 配置檔。一基本上只要前四項即可達成, 至於 xml 目錄下
https://developer.android.com/guide/topics/appwidgets/index.html#MetaData
layout https://developer.android.com/guide/practices/ui_guidelines/widget_desig...
► AppWidgetProviderInfo(xml\appwidget_info.xml):描述App Widget的 配置檔。一基本上只要前四項即可達成, 至於 xml 目錄下
►View Layout(appwidget_layout.xml):設計widget所要呈現的UI佈局。<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="72dip" // 尺寸(dip) = (佔用格子數 * 74) - 2 android:minHeight="72dip" android:updatePeriodMillis="86400000" //更新頻率 android:initialLayout="@layout/appwidget_layout" //Widget的呈現layout檔 android:configure="com.example.android.ExampleAppWidgetConfigure" //提供參數設定的 activity android:previewImage="@drawable/preview" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen|keyguard" android:initialKeyguardLayout="@layout/example_keyguard"> </appwidget-provider>
►實作AppWidgetProvider(ExampleAppWidgetProvider.java), 通常一需要在適當的方法內處理我們的資料並呈現<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widgetLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/Caption" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/black" /> </LinearLayout>
► 設定AndroidManifest.xml檔。Widget的基本接收參數public class AppWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); //通常在此 context.startService() } public void onDeleted(Context context, int[] appWidgetIds) { } public void onEnabled(Context context) { super.onEnabled(context); //通常在此 context.startService() } public void onDisabled(Context context) { super.onDisabled(context); //通常在此 context.stopService() } public void onReceive(Context context, Intent intent) { //一般情況下可以不用處理, 因為內部已幫接收到的 action 分類進行呼叫相關方法, onUpdate,onDeleted,onEnabled,onDisabled } }
► 程式中如何更新 UI 資料, 則需透過 RemoteViews 來進行<receiver android:name="ExampleAppWidgetProvider" > //實作的類別名稱 <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" /> //配置檔檔名 </receiver> //若有使用 Configure 參數, 則同一般 acivity一樣需加入下參數 <activity android:name=".ExampleAppWidgetConfigure"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> </intent-filter> </activity>
上述項目算是完成一個 Widget 簡單的框架, 至於widget資料的交握通常我們是利用 Serivce 來達成接收,處理,傳送等等需求.//取得 Widget Views RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget_layout); remoteViews.setTextViewText(R.id.Caption, "更新資料"); //更新 Widget 顯示 ComponentName tweetWidget = new ComponentName(context, BatteryWidgetProvider.class); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); appWidgetManager.updateAppWidget(tweetWidget, remoteViews);
https://developer.android.com/guide/topics/appwidgets/index.html#MetaData
layout https://developer.android.com/guide/practices/ui_guidelines/widget_desig...