2013年3月4日 星期一

Android Widget 範例

google官方文件
http://developer.android.com/guide/topics/appwidgets/index.html

如何製作Android Widget

Step1. 

建立專案,建置中勾選Create Activity,如果只想要純Widget沒有App程式則可不選Create Activity。

Step2. 

新增widget layou xml檔案,用來撰寫widget layout。
Eclipse>File>new>Android XML File (resource type選Layout)
這xml是用來編輯Widget的UI畫面,和在寫一般的Android程式編UI畫面一樣。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/HelloWIdgetTest" />
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/widgetTestString" />
</LinearLayout>


Step3. 

新增widget_metadata.xml,用來描述Widget的meta data (寬、高,更新頻率..etc)

Eclipse>File>new>Android XML File (resource type選AppWidgetProvider)
  • initiallayout設成step2中的widget_layout
  • minheight、minwidth為最小寬高
  • updateperiodmillis更新頻率1000=1秒

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" >
     android:initialLayout="@layout/widget_layout"
     android:minHeight="80dip" android:minWidth="160dip"
     android:updatePeriodMillis="864000000"
</appwidget-provider>

Step4. 

撰寫code,初始動作和Widget要做什麼事寫在這裡囉,WidgetTestProvider 繼承 AppWidgetProvider,有底下幾個method事以操作,有空再來細細研究 囧rz
  • onUpdate()
  • onAppWidgetOptionsChanged()
  • onDeleted(Context, int[])
  • onEnabled(Context)
  • onDisabled(Context)
  • onReceive(Context, Intent)
package com.example.widgettest;
import android.appwidget.*;
import android.content.*;
import android.widget.*;
public class WidgetTestProvider extends AppWidgetProvider{
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
  RemoteViews myviews=new RemoteViews(context.getPackageName(),R.layout.widget_layout);
  ComponentName mywidget=new ComponentName(context,WidgetTestProvider.class);
  appWidgetManager.updateAppWidget(mywidget, myviews);
  }
}


Step5. 

在Android Manifest file中描述widget,這樣才會出現此widget可選,另外這裡也設定權限。code加在<application>...</application>之間。


<receiver android:name="WidgetTestProvider"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name">
  <intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data android:name="android.appwidget.provider"
             android:resource="@xml/widget_metadata" />
</receiver>


Step6. 

看結果,成功 ^^


沒有留言:

張貼留言