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

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

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

    歡迎使用我的 在線工具

    小D

    讀歷史、看小說、寫程序都是我所愛。技術(shù)不好,頭腦不靈光,靠的是興趣。
    隨筆 - 35, 文章 - 25, 評論 - 13, 引用 - 0
    數(shù)據(jù)加載中……

    Android的Widget

          Android的AppWidget的概念不好理解啊,我也不知道理解得對不對,先記在這里,以免以后又忘記了。
          (1) 建立一個Android工程,用eclispse吧,下一步,下一步的就不多說了。
          (2) 在res/xml目錄下面建立一個xml文件。命名隨便吧。寫下如下內(nèi)容
               
    1<?xml version="1.0" encoding="utf-8"?>
    2<appwidget-provider
    3  xmlns:android="http://schemas.android.com/apk/res/android"
    4  android:initialLayout="@layout/widget_layout_small"
    5  android:minWidth="72dip" android:minHeight="72dip" android:updatePeriodMillis="3600000">
    6</appwidget-provider>
             這里是定義一個appwidget-provider,Android系統(tǒng)從這里認(rèn)為該程序是一個widget程序。android:initialLayout指定布局文件,也就是在res/layout目錄下的那些個xml文件;android:updatePeriodMillis知道更新周期,單位為毫秒;還有一個android:configure,這個是可選的,如果你的widget事先要啟動一個Activity,就需要在這里指定一個Activity,顯然我們這里不需要。他就是一個AppWidgetProviderInfo類的描述信息。
         (3) 寫布局文件,這個就不多說了。
         (4) appwidget-provider,定義一個類,從AppWidgetProvider類繼承,他實際是一個BroadcastReceiver,系統(tǒng)使用它和Widget界面進(jìn)行交互。
             
     1package cn.vaga.today;
     2
     3import java.util.Calendar;
     4
     5import android.app.PendingIntent;
     6import android.appwidget.AppWidgetManager;
     7import android.appwidget.AppWidgetProvider;
     8import android.content.ComponentName;
     9import android.content.Context;
    10import android.content.Intent;
    11import android.graphics.Canvas;
    12import android.text.format.Time;
    13import android.widget.RemoteViews;
    14
    15public class TodayDateSmall extends AppWidgetProvider
    16{
    17    // 當(dāng)這個AppWidget提供者 被要求提供RemoteViews一系列的AppWidgets,這個方法作為ACTION_APPWIDGET_UPDATE
    18    // 廣播回復(fù)時被調(diào)用
    19    // 每次更新AppWidget時候調(diào)用
    20       @Override
    21       public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    22           // 得到更新后的RemoteViews
    23          RemoteViews updateView = buildUpdate(context);
    24          //更新Widget的RemoteViews
    25          appWidgetManager.updateAppWidget(appWidgetIds, updateView);
    26          super.onUpdate(context, appWidgetManager, appWidgetIds);
    27       }

    28       
    29       private String[] months = {"一月""二月""三月""四月",
    30               "五月""六月""七月""八月",
    31               "九月""十月""十一月""十二月"}
    ;
    32       
    33       
    34       private RemoteViews buildUpdate(Context context) {
    35          RemoteViews updateView = null;
    36          // 這個Time更快
    37         // Time time = new Time();
    38          // 現(xiàn)在
    39          //time.setToNow();
    40          Calendar cal = Calendar.getInstance();
    41          String month = months[cal.get(Calendar.MONTH)];
    42          // 得到RemoteViews
    43          updateView = new RemoteViews(context.getPackageName(), R.layout.widget_layout_small);
    44          // 設(shè)置View的內(nèi)容
    45          // 日期
    46          updateView.setTextViewText(R.id.Date, String.valueOf(cal.get(Calendar.DATE)));
    47          // 月
    48          updateView.setTextViewText(R.id.Month, month);
    49          Lunar lunar = new Lunar(cal);
    50          updateView.setTextViewText(R.id.Lunar,lunar.toString());
    51          // OK,這個一個運行用的Intent啦
    52          // 加下面這段應(yīng)該只是為了讓W(xué)idget相應(yīng)click事件吧
    53          Intent launchIntent = new Intent();
    54          // 設(shè)置處理該Intent的組件,這里是android自帶的日期啟動組件
    55          launchIntent.setComponent(new ComponentName("com.android.calendar""com.android.calendar.LaunchActivity"));
    56          // 設(shè)置該Itent為主進(jìn)入點
    57          launchIntent.setAction(Intent.ACTION_MAIN);
    58          launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    59          launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    60          // 啟動指定的Intent的Activity
    61          PendingIntent intent = PendingIntent.getActivity(context, 0, launchIntent, 0);
    62          // 監(jiān)聽點擊事件
    63          updateView.setOnClickPendingIntent(R.id.SmallBase, intent);
    64          return updateView;
    65       }

    66}

    67
    68
         他有四個方法:onDeleted、onEnabled、onDisabled、onUpdate,我們這里只實現(xiàn)了最主要的onUpdate方法,他在周期更新的時候調(diào)用。每次調(diào)用就用appWidgetManager來更新Widget(生成一個RemoteView)。appWidgetManager是系統(tǒng)生成的用于管理Widget的對象,我們不需要進(jìn)行管理,它會向AppWidgetProvider發(fā)通知,他會更新Widget的UI。

         (5) AndroidManifest.xml 
         
     1<?xml version="1.0" encoding="utf-8"?>
     2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3      package="cn.vaga.today"
     4      android:versionCode="1"
     5      android:versionName="1.0">
     6    <application android:icon="@drawable/icon" android:label="@string/app_name_small">
     7        <!-- 訂閱指定的BroadcastReceiver -->
     8        <receiver android:label="@string/app_name_small" android:name=".TodayDateSmall">
     9            <intent-filter>
    10            <!-- 就只處理更新的廣播 -->
    11                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
    12            </intent-filter>
    13            <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_small"></meta-data>
    14        </receiver>
    15    </application>
    16    <uses-sdk android:minSdkVersion="7" />
    17
    18</manifest> 

         在這里注冊AppWidgetRecever指定其處理的Intent的Action為android.appwidget.action.APPWIDGET_UPDATE。當(dāng)然還要個AppWidgetRecever指定它的描述文件
                <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_small"></meta-data>,這是很必要的,否則Android也不會知道這個Widget到底是如何定義的了。

    posted on 2011-04-10 23:52 vagasnail 閱讀(1541) 評論(0)  編輯  收藏 所屬分類: Android

    主站蜘蛛池模板: 精品亚洲福利一区二区| 99视频在线观看免费| 国产成人精品亚洲精品| 免费无遮挡无码永久视频 | 大妹子影视剧在线观看全集免费| 日韩亚洲欧洲在线com91tv| 久久久久久国产a免费观看黄色大片 | 又粗又大又长又爽免费视频| 国产性生大片免费观看性 | 亚洲性色精品一区二区在线| 亚洲国产精品狼友中文久久久| 香港a毛片免费观看| 久久精品国产亚洲AV天海翼| 色噜噜综合亚洲av中文无码| 国产免费131美女视频| 久久久99精品免费观看| 精品亚洲成a人在线观看| 亚洲黄色在线观看网站| 亚洲国产精品成人一区| 日韩精品成人无码专区免费| 三上悠亚在线观看免费| 狠狠入ady亚洲精品| 亚洲另类春色校园小说| 亚洲中文字幕无码不卡电影 | 亚洲女初尝黑人巨高清| 日本免费v片一二三区| 最近免费中文字幕大全免费版视频| 老司机福利在线免费观看| 亚洲人妖女同在线播放| 亚洲国产成人高清在线观看| 丁香亚洲综合五月天婷婷| 久久精品无码一区二区三区免费| 日韩电影免费在线观看中文字幕| 一区二区三区视频免费| 中文字幕亚洲综合久久综合 | 亚洲风情亚Aⅴ在线发布| 亚洲国产精品午夜电影| 免费三级毛片电影片| 久久WWW免费人成—看片| 国产亚洲精品美女久久久久 | 久久精品国产免费观看|