Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Widget

Android Widget

編輯:關於Android編程

桌面控件是通過BroadCast的形式進行控制的,因此每個桌面控件都對應一個BroadCastReceiver.為了簡化桌面控件的開發,Android提供了一個AppWidgetProvider類,它就是BroadcastReceiver的子類.

為了開發桌面控件,開發者只要開發一個繼承AppWidgetProvider的子類,並重寫AppWidgetProvider不同的生命周期方法即可.

AppWidgetProvider提供如下4個不同的生命周期方法:

onUpdate():負責更新桌面的方法;實現桌面控件通常會考慮重寫該方法

onDeleted():當一個或多個桌面控件被刪除時回調該方法

onEnabled():當接收到ACTION_APPWIDGET_ENABLED BroadCast時回調該方法.

onDisabled():當接收到ACTION_APPWIDGET_DISABLED BroadCast時回調該方法.


一般來說,開發桌面控件只需要定義一個AppWidgetProvider的子類,並重寫它的OnUpdate()方法即可,重寫該方法的步驟如下:

創建一個RemoteViews對象,創建該對象時可以指定加載指定的界面布局文件

如果需要改變上一步所加載的界面布局文件的內容,可通過RemoteViews對象進行修改

創建一個ComponentName對象

調用AppWidgetManager更新桌面控件

以上步驟即:使用AppWidgetManager通過RemteViews來更新AppWidgetProvider的子類實例(需要將它包裝成COmponentName對象)


開發Widget步驟如下:

創建小插件的布局(layout)

創建小插件的屬性配置文件(xml):appwidget providerinfo

創建AppWidgetProvider並覆寫對應的生命周期方法

注冊AppWidgetProvider


AppWidgetProvider:

package org.crazyit.desktop;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.RemoteViews;

/**
 * Description:
 * 
site: crazyit.org *
Copyright (C), 2001-2014, Yeeku.H.Lee *
This program is protected by copyright laws. *
Program Name: *
Date: * @author Yeeku.H.Lee [email protected] * @version 1.0 */ public class LedClock extends AppWidgetProvider { private Timer timer = new Timer(); private AppWidgetManager appWidgetManager; private Context context; // 將0~9的液晶數字圖片定義成數組 private int[] digits = new int[] { R.drawable.su01, R.drawable.su02, R.drawable.su03, R.drawable.su04, R.drawable.su05, R.drawable.su06, R.drawable.su07, R.drawable.su08, R.drawable.su09, R.drawable.su10, }; // 將顯示小時、分鐘、秒鐘的ImageView定義成數組 private int[] digitViews = new int[] { R.id.img01, R.id.img02, R.id.img04, R.id.img05, R.id.img07, R.id.img08 }; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { System.out.println("--onUpdate--"); this.appWidgetManager = appWidgetManager; this.context = context; // 定義計時器 timer = new Timer(); // 啟動周期性調度 timer.schedule(new TimerTask() { public void run() { // 發送空消息,通知界面更新 handler.sendEmptyMessage(0x123); } }, 0, 1000); } private Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0x123) { RemoteViews views = new RemoteViews(context .getPackageName(), R.layout.main); // 定義SimpleDateFormat對象 SimpleDateFormat df = new SimpleDateFormat( "HHmmss"); // 將當前時間格式化成HHmmss的形式 String timeStr = df.format(new Date()); for(int i = 0 ; i < timeStr.length() ;i++) { // 將第i個數字字符轉換為對應的數字 int num = timeStr.charAt(i) - 48; // 將第i個圖片的設為對應的液晶數字圖片 views.setImageViewResource(digitViews[i], digits[num]); } // 將AppWidgetProvider子類實例包裝成ComponentName對象 ComponentName componentName = new ComponentName(context, LedClock.class); // 調用AppWidgetManager將remoteViews添加到ComponentName中 appWidgetManager.updateAppWidget(componentName, views); } super.handleMessage(msg); } }; }


AndroidManifest.xml:
		
			
			
				
			
			
			
		
	


xml配置文件:




main.xml:










						


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved