实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
生活随笔
收集整理的這篇文章主要介紹了
实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android不用我多說了,這是Google在2007年推出的一款主要用于移動設備的操作系統。google在android sdk1.5中加入了appwidget api。通過這項技術,可以在android手機的主界面(Home界面)顯示可以拖動的窗口,用于顯示各種用戶需要的信息。至于顯示什么,就完全依靠開發人員的想象力了。OK,廢話少說。我們先來體驗一下如何開發一個顯示當前時間的appwidget。這個appwidget每秒刷新一次,顯示時、分和秒。這個appwidget的效果如圖1所示。
圖1
圖1上方“當前時間:03:34:34”就是我們要實現的appwidget。這個appwidget是可以拖動的。如果在真機或android模擬器中這個時間是變化的。
??? 我們可按如下四步來實現這個appwidget: 步驟1:實現appwidget的layout 在android上編程的人都知道,android的界面離不開layout,appwidget也不例外。建立appwidget layout的方式與建立其他layout的方式相同。在res\layout目錄中建立一個firstappwidget.xml文件,代碼如下: <?xml?version="1.0"?encoding="utf-8"?>
<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"
????android:orientation="vertical"?android:layout_width="fill_parent"
????android:layout_height="fill_parent">
????<TextView?android:id="@+id/tvMsg"?android:layout_width="fill_parent"
????????android:layout_height="wrap_content"?android:textSize="20dp"?
????????android:textColor="#F00"?/>
</LinearLayout>
??? tvMsg用于顯示applwidget中的文字,也就是類似“當前時間:03:34:34”的字符串。
步驟2:編寫AppWidgetProvider類
??? appwidget需要一個AppWidgetProvider類的子類,該類的代碼如下:
package?net.blogjava.nokiaguy.appwidget;
import?java.util.Date;
import?android.appwidget.AppWidgetManager;
import?android.appwidget.AppWidgetProvider;
import?android.content.Context;
import?android.widget.RemoteViews;
public?class?MyAppWidgetProvider?extends?AppWidgetProvider
{
????public?void?onUpdate(Context?context,?AppWidgetManager?appWidgetManager,
????????????int[]?appWidgetIds)
????{
????????final?int?N?=?appWidgetIds.length;
????????for?(int?i?=?0;?i?<?N;?i++)
????????{
????????????int?appWidgetId?=?appWidgetIds[i];
????????????RemoteViews?views?=?new?RemoteViews(context.getPackageName(),
????????????????????R.layout.firstappwidget);????
????????????java.text.DateFormat?df?=?new?java.text.SimpleDateFormat("hh:mm:ss");
????????????views.setTextViewText(R.id.tvMsg,?"當前時間:"?+?df.format(new?Date()));????????????
????????????appWidgetManager.updateAppWidget(appWidgetId,?views);
????????}????????
????}
}
??? 當創建每一個appwidget的實例時AppWidgetManager都會調用該appwidget的onUpdate方法。要想使更新有效,必須調用updateAppWidget方法更新相應的appwidget中的view。
步驟3:配置<appwidget-provider>元素
??? appwidget還需要一個<appwidget-provider>元素來描述appwidget的大小、布局、更新頻率等信息。在res目錄下建立一個xml目錄,在res\xml目錄下建立一個appwidget_provider.xml,并輸入如下的代碼:
<?xml?version="1.0"?encoding="utf-8"?>
<appwidget-provider?xmlns:android="http://schemas.android.com/apk/res/android"
????android:minWidth="200dp"
????android:minHeight="30dp"
????android:updatePeriodMillis="1000"
????android:initialLayout="@layout/firstappwidget"/>
??? 其中android:minWidth和android:minHeight表示appwidget的最小寬度和高度,android:updatePeriodMillis表示更新頻率,單位是毫秒。也就是說,AppWidgetManager每秒都會調用該appwidget的onUpdate方法。因此,onUpdate方法在兩種情況下被調用,第一種是添加appwidget時,第二種是每一個更新周期結束時調用一次onUpdate方法。
步驟4:進行最后的配置
??? appwidget需要在appwidget_provider.xml文件中配置receiver,從這一點可以看出,android是通過Broadcast來通知每一個appwidget的。appwidget_provider.xml文件的配置代碼如下:
<?xml?version="1.0"?encoding="utf-8"?>
<manifest?xmlns:android="http://schemas.android.com/apk/res/android"
????package="net.blogjava.nokiaguy.appwidget"?android:versionCode="1"?android:versionName="1.0">
????<application?android:icon="@drawable/icon"?android:label="@string/app_name">
????????<receiver?android:name=".MyAppWidgetProvider">
????????????<meta-data?android:name="android.appwidget.provider"
????????????????????android:resource="@xml/appwidget_provider"?/>
????????????<intent-filter>
????????????????<action?android:name="android.appwidget.action.APPWIDGET_UPDATE"?/>
????????????</intent-filter>
????????</receiver>
????</application>
????<uses-sdk?android:minSdkVersion="3"?/>
</manifest>
??? 在上面的配置代碼中使用<intent-filter>元素的<action>子元素來指定appwidget接收的動作。使用<meta-data>元素指定appwidget的layout。
??? 將這個程序安裝在android模擬器中,我們會發現appwidget并沒有出現。實際上,appwidget需要手工去添加。通過模擬器的menu,進入“添加”列表,選擇“widgets”,我們就會找到本文實現的appwidget,名稱為“顯示當前時間”。如圖2所示。
圖2
??? 當然,只要Home頁有地方,我們也可以添加多個appwidget,如圖3所示。
圖3
圖1
圖1上方“當前時間:03:34:34”就是我們要實現的appwidget。這個appwidget是可以拖動的。如果在真機或android模擬器中這個時間是變化的。
??? 我們可按如下四步來實現這個appwidget: 步驟1:實現appwidget的layout 在android上編程的人都知道,android的界面離不開layout,appwidget也不例外。建立appwidget layout的方式與建立其他layout的方式相同。在res\layout目錄中建立一個firstappwidget.xml文件,代碼如下: <?xml?version="1.0"?encoding="utf-8"?>
<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"
????android:orientation="vertical"?android:layout_width="fill_parent"
????android:layout_height="fill_parent">
????<TextView?android:id="@+id/tvMsg"?android:layout_width="fill_parent"
????????android:layout_height="wrap_content"?android:textSize="20dp"?
????????android:textColor="#F00"?/>
</LinearLayout>
??? tvMsg用于顯示applwidget中的文字,也就是類似“當前時間:03:34:34”的字符串。
步驟2:編寫AppWidgetProvider類
??? appwidget需要一個AppWidgetProvider類的子類,該類的代碼如下:
package?net.blogjava.nokiaguy.appwidget;
import?java.util.Date;
import?android.appwidget.AppWidgetManager;
import?android.appwidget.AppWidgetProvider;
import?android.content.Context;
import?android.widget.RemoteViews;
public?class?MyAppWidgetProvider?extends?AppWidgetProvider
{
????public?void?onUpdate(Context?context,?AppWidgetManager?appWidgetManager,
????????????int[]?appWidgetIds)
????{
????????final?int?N?=?appWidgetIds.length;
????????for?(int?i?=?0;?i?<?N;?i++)
????????{
????????????int?appWidgetId?=?appWidgetIds[i];
????????????RemoteViews?views?=?new?RemoteViews(context.getPackageName(),
????????????????????R.layout.firstappwidget);????
????????????java.text.DateFormat?df?=?new?java.text.SimpleDateFormat("hh:mm:ss");
????????????views.setTextViewText(R.id.tvMsg,?"當前時間:"?+?df.format(new?Date()));????????????
????????????appWidgetManager.updateAppWidget(appWidgetId,?views);
????????}????????
????}
}
??? 當創建每一個appwidget的實例時AppWidgetManager都會調用該appwidget的onUpdate方法。要想使更新有效,必須調用updateAppWidget方法更新相應的appwidget中的view。
步驟3:配置<appwidget-provider>元素
??? appwidget還需要一個<appwidget-provider>元素來描述appwidget的大小、布局、更新頻率等信息。在res目錄下建立一個xml目錄,在res\xml目錄下建立一個appwidget_provider.xml,并輸入如下的代碼:
<?xml?version="1.0"?encoding="utf-8"?>
<appwidget-provider?xmlns:android="http://schemas.android.com/apk/res/android"
????android:minWidth="200dp"
????android:minHeight="30dp"
????android:updatePeriodMillis="1000"
????android:initialLayout="@layout/firstappwidget"/>
??? 其中android:minWidth和android:minHeight表示appwidget的最小寬度和高度,android:updatePeriodMillis表示更新頻率,單位是毫秒。也就是說,AppWidgetManager每秒都會調用該appwidget的onUpdate方法。因此,onUpdate方法在兩種情況下被調用,第一種是添加appwidget時,第二種是每一個更新周期結束時調用一次onUpdate方法。
步驟4:進行最后的配置
??? appwidget需要在appwidget_provider.xml文件中配置receiver,從這一點可以看出,android是通過Broadcast來通知每一個appwidget的。appwidget_provider.xml文件的配置代碼如下:
<?xml?version="1.0"?encoding="utf-8"?>
<manifest?xmlns:android="http://schemas.android.com/apk/res/android"
????package="net.blogjava.nokiaguy.appwidget"?android:versionCode="1"?android:versionName="1.0">
????<application?android:icon="@drawable/icon"?android:label="@string/app_name">
????????<receiver?android:name=".MyAppWidgetProvider">
????????????<meta-data?android:name="android.appwidget.provider"
????????????????????android:resource="@xml/appwidget_provider"?/>
????????????<intent-filter>
????????????????<action?android:name="android.appwidget.action.APPWIDGET_UPDATE"?/>
????????????</intent-filter>
????????</receiver>
????</application>
????<uses-sdk?android:minSdkVersion="3"?/>
</manifest>
??? 在上面的配置代碼中使用<intent-filter>元素的<action>子元素來指定appwidget接收的動作。使用<meta-data>元素指定appwidget的layout。
??? 將這個程序安裝在android模擬器中,我們會發現appwidget并沒有出現。實際上,appwidget需要手工去添加。通過模擬器的menu,進入“添加”列表,選擇“widgets”,我們就會找到本文實現的appwidget,名稱為“顯示當前時間”。如圖2所示。
圖2
??? 當然,只要Home頁有地方,我們也可以添加多個appwidget,如圖3所示。
圖3
總結
以上是生活随笔為你收集整理的实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim编辑环境设定[Linux]
- 下一篇: 【转】深入探讨 Android 传感器