廢言
android 的應用程式,對我來說,都是玩票性質。為了做表面功夫,每個禮拜都有東西可以present,也只好做一些自己沒什麼興趣的事了。不過老板也有他的道理,現在不是喜不喜歡,願不願意的問題,而是在"高層"那些不懂技術的beta user的眼中,要了解自己在他們心中有沒有value。說穿了,這不只是你為公司做了多少事,牲犧了多少自我,更是你的表面功夫,嘴炮能力的高低。隨便講個比例,辛辛苦苦的完成了一個projcect,在老板眼中可能可以拿到三成的value。如果就此打住,那你就是這樣了,公司不會感謝你,不景氣的時候,你仍然是裁員名單的正取生。但如果嘴炮能力夠,懂得吹噓,才有可能拿到那佔大部份的七成。更有甚者,會有另一票完全沒辛苦過的人,會來搶這七成。這是事實,也是人性。只是得問問自己,要站在哪個點上?有多sophiticated?某種程度上,我的確是變了,讓我有點討厭自己。
引言
在Android 1.5 SDK提供了AppWidget的功能,因此可以在桌面上擺放各式各樣的widget。Widget的特色是interactive,包括對使用者或是framework。使用者可以暫停一個music player; framework可以定期更新widget的內容。相較於應用程式,是活潑多了! 也因為此特色,widget都應該是一個broadcast receiver,待會要介紹的,也是最陽春的widget,被強迫要深入時,再來update。
App Widgets
App Widgets就是一個微型的應用程式,可以嵌入另一個應用程式 (通常就是Home)並且接受update。定義上,可被嵌入的應用程式稱為App Widget host。
(此節待續)
Primitive
1. AndroidManifest.xml: 不用多說,在android要可以跑的東西都要註冊。
2. res/layout/main.xml: UI的外型
3. res/xml/xxx.xml: 這是widget的metadata。指定high, width, update interval, initial layout等等。
4. src/xxx.java: 就是主程式
實作
以下的source code的來源是The Smiling-Blog,在此先感謝作者Norbert M.。
1. AndroidManifest.xml: 主要是告訴package manager要註冊這個widget,並在xml裡宣告一個receiver。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.thesmile.android.widget"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".HelloWidget" 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/hello_widget_provider" />
</receiver>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
2. res/layout/main.xml: 將在widget中顯示的東西,如widget的背景,文字。當然還有其layout。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:background="@drawable/widget_bg_normal"
android:layout_gravity="center"
android:layout_height="wrap_content">
<TextView android:id="@+id/widget_textview"
android:text="@string/widget_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal|center"
android:layout_marginTop="5dip"
android:padding="10dip"
android:textColor="@android:color/black"/>
</LinearLayout>
3. res/xml/xxx.xml:widget的大小是有單位的,所以會有round up。updatePeriodMillis是定義其update的period。
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dip"
android:minHeight="72dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/main"
/>
4. src/xxx.java: 沒錯,就是空的程式,因為什麼事都沒做,只是弄一個widget出來。
package de.thesmile.android.widget;
import android.appwidget.AppWidgetProvider;
public class HelloWidget extends AppWidgetProvider {
}
這樣就可以弄一個像下圖的widget出來了!
Reference
留言列表