<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    實現(xiàn)一個用于顯示當(dāng)前時間的Google Android 窗口小部件(AppWidget)

    本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

        Android不用我多說了,這是Google在2007年推出的一款主要用于移動設(shè)備的操作系統(tǒng)。google在android sdk1.5中加入了appwidget api。通過這項技術(shù),可以在android手機(jī)的主界面(Home界面)顯示可以拖動的窗口,用于顯示各種用戶需要的信息。至于顯示什么,就完全依靠開發(fā)人員的想象力了。OK,廢話少說。我們先來體驗一下如何開發(fā)一個顯示當(dāng)前時間的appwidget。這個appwidget每秒刷新一次,顯示時、分和秒。這個appwidget的效果如圖1所示。
    圖1

        圖1上方“當(dāng)前時間:03:34:34”就是我們要實現(xiàn)的appwidget。這個appwidget是可以拖動的。如果在真機(jī)或android模擬器中這個時間是變化的。
        我們可按如下四步來實現(xiàn)這個appwidget:

    步驟1:實現(xiàn)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中的文字,也就是類似“當(dāng)前時間: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, 
    "當(dāng)前時間:" + df.format(new Date()));            
                appWidgetManager.updateAppWidget(appWidgetId, views);
            }        
        }
    }

        當(dāng)創(chuàng)建每一個appwidget的實例時AppWidgetManager都會調(diào)用該appwidget的onUpdate方法。要想使更新有效,必須調(diào)用updateAppWidget方法更新相應(yīng)的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每秒都會調(diào)用該appwidget的onUpdate方法。因此,onUpdate方法在兩種情況下被調(diào)用,第一種是添加appwidget時,第二種是每一個更新周期結(jié)束時調(diào)用一次onUpdate方法。

    步驟4:進(jìn)行最后的配置

        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模擬器中,我們會發(fā)現(xiàn)appwidget并沒有出現(xiàn)。實際上,appwidget需要手工去添加。通過模擬器的menu,進(jìn)入“添加”列表,選擇“widgets”,我們就會找到本文實現(xiàn)的appwidget,名稱為“顯示當(dāng)前時間”。如圖2所示。
    圖2
        當(dāng)然,只要Home頁有地方,我們也可以添加多個appwidget,如圖3所示。
    圖3





    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-07-22 16:05 銀河使者 閱讀(2742) 評論(2)  編輯  收藏 所屬分類: java 原創(chuàng)移動(mobile)

    評論

    # re: 實現(xiàn)一個用于顯示當(dāng)前時間的Google Android 窗口小部件(AppWidget)  回復(fù)  更多評論   

    不錯。。。
    2009-07-23 14:20 | subtitle

    # re: 實現(xiàn)一個用于顯示當(dāng)前時間的Google Android 窗口小部件(AppWidget)  回復(fù)  更多評論   

    Note: Updates requested with updatePeriodMillis will not be delivered more than once every 30 minutes.
    2012-07-03 00:08 | yxx
    主站蜘蛛池模板: 色拍自拍亚洲综合图区| 在线观看亚洲AV每日更新无码| 97免费人妻在线视频| 亚洲中文字幕在线无码一区二区| 国产a级特黄的片子视频免费| 免费看黄的成人APP| 亚洲熟妇自偷自拍另欧美| 国产亚洲精品免费视频播放| 免费精品国偷自产在线在线| 一级午夜免费视频| 亚洲高清中文字幕综合网| 免费国产美女爽到喷出水来视频| 99re免费在线视频| 国产午夜亚洲精品不卡电影| 亚洲精品第五页中文字幕| 亚洲A∨精品一区二区三区| 久久亚洲美女精品国产精品 | 老司机午夜在线视频免费| 无码欧精品亚洲日韩一区| 免费国产a国产片高清| 2021国内精品久久久久精免费| 草久免费在线观看网站| 亚洲大香伊人蕉在人依线| 中文字幕不卡亚洲| 青青草国产免费久久久下载 | 在线播放国产不卡免费视频| 亚洲国产精品线观看不卡| 亚洲无人区一区二区三区| 国产又黄又爽又猛的免费视频播放| 蜜臀AV免费一区二区三区| 国产又黄又爽又大的免费视频| 羞羞漫画小舞被黄漫免费| 亚洲国产中文在线二区三区免| 久久久久久亚洲精品中文字幕| 亚洲国产精品一区二区第四页| 性色av免费观看| 97在线观看永久免费视频| 免费看搞黄视频网站| 一个人晚上在线观看的免费视频| 国产精品亚洲天堂| 亚洲日韩中文字幕无码一区|