Widget 基本設計架構

1 篇文章 / 0 new
author
Widget 基本設計架構
設計一個Widget基本上只需要下四個設計及可運作
► AppWidgetProviderInfo(xml\appwidget_info.xml):描述App Widget的 配置檔。一基本上只要前四項即可達成, 至於 xml 目錄下
<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>
►View Layout(appwidget_layout.xml):設計widget所要呈現的UI佈局。
<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>
►實作AppWidgetProvider(ExampleAppWidgetProvider.java), 通常一需要在適當的方法內處理我們的資料並呈現
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
    }
}
► 設定AndroidManifest.xml檔。Widget的基本接收參數
<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>
► 程式中如何更新 UI 資料, 則需透過 RemoteViews 來進行
//取得 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);
上述項目算是完成一個 Widget 簡單的框架, 至於widget資料的交握通常我們是利用 Serivce 來達成接收,處理,傳送等等需求.

https://developer.android.com/guide/topics/appwidgets/index.html#MetaData
layout https://developer.android.com/guide/practices/ui_guidelines/widget_desig...
Free Web Hosting