廢言

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出來了!

 

hellowidget

 

Reference

1.AppWidget

2.The Smiling-Blog

 

 

 

arrow
arrow
    全站熱搜

    kezeodsnx 發表在 痞客邦 留言(2) 人氣()