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

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

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

    歡迎使用我的 在線工具

    小D

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

    Android的Widget

          Android的AppWidget的概念不好理解啊,我也不知道理解得對不對,先記在這里,以免以后又忘記了。
          (1) 建立一個Android工程,用eclispse吧,下一步,下一步的就不多說了。
          (2) 在res/xml目錄下面建立一個xml文件。命名隨便吧。寫下如下內容
               
    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系統從這里認為該程序是一個widget程序。android:initialLayout指定布局文件,也就是在res/layout目錄下的那些個xml文件;android:updatePeriodMillis知道更新周期,單位為毫秒;還有一個android:configure,這個是可選的,如果你的widget事先要啟動一個Activity,就需要在這里指定一個Activity,顯然我們這里不需要。他就是一個AppWidgetProviderInfo類的描述信息。
         (3) 寫布局文件,這個就不多說了。
         (4) appwidget-provider,定義一個類,從AppWidgetProvider類繼承,他實際是一個BroadcastReceiver,系統使用它和Widget界面進行交互。
             
     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    // 當這個AppWidget提供者 被要求提供RemoteViews一系列的AppWidgets,這個方法作為ACTION_APPWIDGET_UPDATE
    18    // 廣播回復時被調用
    19    // 每次更新AppWidget時候調用
    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          // 現在
    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          // 設置View的內容
    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          // 加下面這段應該只是為了讓Widget相應click事件吧
    53          Intent launchIntent = new Intent();
    54          // 設置處理該Intent的組件,這里是android自帶的日期啟動組件
    55          launchIntent.setComponent(new ComponentName("com.android.calendar""com.android.calendar.LaunchActivity"));
    56          // 設置該Itent為主進入點
    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          // 監聽點擊事件
    63          updateView.setOnClickPendingIntent(R.id.SmallBase, intent);
    64          return updateView;
    65       }

    66}

    67
    68
         他有四個方法:onDeleted、onEnabled、onDisabled、onUpdate,我們這里只實現了最主要的onUpdate方法,他在周期更新的時候調用。每次調用就用appWidgetManager來更新Widget(生成一個RemoteView)。appWidgetManager是系統生成的用于管理Widget的對象,我們不需要進行管理,它會向AppWidgetProvider發通知,他會更新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。當然還要個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

    主站蜘蛛池模板: 亚洲中文字幕在线乱码| 女人与禽交视频免费看| 亚洲国产精品自在拍在线播放| 久久精品国产亚洲AV久| 成人黄色免费网站| 亚洲成年人电影网站| 亚洲免费观看在线视频| 亚洲小说区图片区| 噼里啪啦免费观看高清动漫4| 亚洲国产中文在线视频| 久久久高清免费视频| 亚洲熟妇无码av另类vr影视| 全免费a级毛片免费**视频| 亚洲爆乳少妇无码激情| 人人狠狠综合久久亚洲高清| 日韩电影免费在线观看网址 | 成人性生交视频免费观看| 亚洲一级毛片免观看| 性一交一乱一视频免费看| 久久亚洲精品无码gv| 亚洲国产a级视频| 中文字幕免费在线观看动作大片| 亚洲精品成人网站在线观看| 久久久久成人片免费观看蜜芽 | a级毛片高清免费视频就| 亚洲阿v天堂在线| www视频在线观看免费| 亚洲乱码国产乱码精华| 国产一区二区免费在线| 亚洲免费人成在线视频观看 | 亚洲成A∨人片天堂网无码| 国产成人无码免费网站| 久久久久亚洲AV无码永不| 四虎在线视频免费观看| 黄床大片免费30分钟国产精品| 亚洲国产综合91精品麻豆| 毛片免费观看网址| 91成人免费观看在线观看| 久久精品国产亚洲αv忘忧草| 亚洲av无码专区在线观看素人| 99久久综合精品免费|