自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Widget初學(xué)者文檔之Widget開發(fā)初體驗(yàn)

移動(dòng)開發(fā)
Widget初學(xué)者文檔之Widget開發(fā)初體驗(yàn)是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)Widget應(yīng)用及開發(fā),具體內(nèi)容的實(shí)現(xiàn)來看本文詳解。

Widget初學(xué)者文檔之Widget開發(fā)初體驗(yàn)是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)Widget應(yīng)用及開發(fā),具體內(nèi)容的實(shí)現(xiàn)來看本文詳解。

要構(gòu)建一個(gè)widget ,需要組織以下內(nèi)容。在AndroidManifest.xml聲明一個(gè)意向接收者<receiver >

AndroidManifest.xml是android應(yīng)用的結(jié)構(gòu)解析文件,安裝程序的時(shí)候android虛擬機(jī)會(huì)從該文件中讀取應(yīng)用的組成和結(jié)構(gòu),生成應(yīng)用圖標(biāo)、名稱等。并為應(yīng)用中的接收器注冊(cè)事件(意向)。

所謂的意向(Intent:翻譯為意向或目的)在android中似乎很常用,一個(gè)Activity啟動(dòng)另外一個(gè)Activity就是用的意向呼叫的形式

java代碼

  1. Intent in = new Intent(ex12.this, rgActivity.class);    
  2. startActivityForResult(in,RG_REQUEST);  

android在某一事件(意向)發(fā)生時(shí)會(huì)將該意向在相應(yīng)的命名空間中以廣播(broadcast)的形式發(fā)布出去,已在命名空間中注冊(cè)了該意向的意向接收器都會(huì)接收到它,并根據(jù)需要進(jìn)行處理。

所以,構(gòu)建一個(gè)widget,首先需要聲明它作為一個(gè)receiver ,即在AndroidManifest.xml文件內(nèi)的<application>節(jié)點(diǎn)下加入一個(gè)recever節(jié)點(diǎn)   

xml代碼

  1. <receiver android:name="MyAppWidget"> 
  2.     <intent-filter> 
  3.      <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> 
  4.      <action android:name="ice4c.test.intent.BtnDown"></action> 
  5.     </intent-filter> 
  6.    <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" />   
  7.    </receiver> 

這段代碼中大致表示了以下意思

  1. <receiver android:name="MyAppWidget">  

這里聲明了一個(gè)recever,它指向工程中定義的[package].MyAppWidget.java的類,亦即使用MyAppWidget.java來接收android.appwidget.action.APPWIDGET_UPDATE和ice4c.test.intent.BtnDown這兩個(gè)動(dòng)作的意向,因此當(dāng)該應(yīng)用中廣播了這兩個(gè)意向,這兩個(gè)意向就會(huì)被MyAppWidget.java類接收。其中android.appwidget.action.APPWIDGET_UPDATE這一個(gè)動(dòng)作是在widget被添加到桌面時(shí)觸發(fā)的,而ice4c.test.intent.BtnDown則是自定義的一個(gè)動(dòng)作。

  1. <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" />  

這里聲明了一個(gè)媒體對(duì)象,指向了android.appwidget.provider,并聲明它的源res/xml/widget_provider.xml,即使用該xml來進(jìn)行該widget的配置。

構(gòu)建上一步提到的widget_provider.xml

上一步的<meta-data >將android.appwidget.provider的源指向widget_provider.xml,于是android的widget管理器會(huì)生成相應(yīng)的菜單,及在桌面菜單的widget中提供添加該小應(yīng)用的入口。而widget_provider.xml則是定義該應(yīng)用的初始化參數(shù)的配置文件

該配置文件的內(nèi)容如下:

xml代碼

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. ppwidget-provider  
  3. xmlns:android="http://schemas.android.com/apk/res/android" 
  4. android:minWidth="294dp"   
  5. android:minHeight="72dp"   
  6. android:updatePeriodMillis="86400000"   
  7. android:initialLayout="@layout/widget_layout"   
  8.  android:configure="ice4c.test.AppWidgetConfigure"   
  9. > 
  10. appwidget-provider> 

該文件提供了如下 信息:

android:minWidth="294dp":widget的***寬度

android:minHeight="72dp":widget的***高度

android:updatePeriodMillis="86400000" :widget的刷新時(shí)間,即從widget添加到桌面之后再次觸發(fā)MyAppWidget.java中onUpdate()方法的周期。

android:initialLayout="@layout/widget_layout" :使用res/layout/widget_layout.xml文件來進(jìn)行該widget的初始化布局。

android:configure="ice4c.test.AppWidgetConfigure" 為widget的高級(jí)配置文件,指向一個(gè)Activity,該Activity提供對(duì)添加的widget進(jìn)行初始化配置的功能

注意:若使用了該選項(xiàng),則MyAppWidget.java中的的OnEnlable將會(huì)失效,因此初始化的過程需要在AppWidgetConfigure.java的onCreate()中進(jìn)行。

構(gòu)建MyAppWidget.java

***步的receiver中指向了MyAppWidget,該類繼承AppWidgetProvider

java代碼

  1. public class MyAppWidget extends AppWidgetProvider{    
  2.  .....    
  3.  }<BR>  

該類從AppWidgetProvider繼承了如下方法,需要的時(shí)候可以覆蓋這些方法來實(shí)現(xiàn)對(duì)應(yīng)的功能

onUpdate(Context, AppWidgetManager, int[]) :該方法在widget被添加到桌面或刷新(android:updatePeriodMillis周期)widget時(shí)被觸發(fā),用來對(duì)widget進(jìn)行更新。(但若定義了android:configure,則添加時(shí)不會(huì)觸發(fā)該方法)。

onDeleted(Context, int[]):該方法在widget被刪除的時(shí)候觸發(fā)。

onEnabled(Context):***次添加該應(yīng)用時(shí)觸發(fā)該方法,可用作初始化靜態(tài)變量或作全局?jǐn)?shù)據(jù)庫的配置。

onDisabled(Context):***一個(gè)應(yīng)用被刪除時(shí)觸發(fā)該方法,可用作清理殘留的相關(guān)數(shù)據(jù)。

onReceive(Context, Intent):與應(yīng)用相關(guān)的intent被接收時(shí)觸發(fā),包括框架中定義的android.appwidget.action.APPWIDGET_UPDATE和自定義的“ice4c.test.intent.BtnDown”等,克依據(jù)對(duì)應(yīng)的intent進(jìn)行處理。

onUpdate的定義

java代碼 

  1. public void onUpdate(Context context, AppWidgetManager appWidgetManager,    
  2.          int[] appWidgetIds) {    
  3.      // TODO Auto-generated method stub    
  4.      super.onUpdate(context, appWidgetManager, appWidgetIds);    
  5.      Log.i("widget", "update");    
  6.      int N = appWidgetIds.length;    
  7.      for( int i = 0 ; i <SPAN style="COLOR: #0000ff"><</SPAN> N ; i++ ){    
  8.          int appId = appWidgetIds[i];     
  9.          Intent intent = new Intent("ice4c.test.intent.BtnDown");    
  10.          PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, 0);    
  11.          remoteV.setOnClickPendingIntent(R.id.wg_btn, pendingintent);    
  12.          appWidgetManager.updateAppWidget(appId, remoteV);    
  13.      }    
  14.  }  

該方法有三個(gè)參數(shù)

Context context上下文環(huán)境,

AppWidgetManager appWidgetManager:widget管理器int[] appWidgetIds:該類的所有實(shí)例widget的id組

該方法注冊(cè)了一個(gè)待定的意向(PendingIntent ),并將該意向綁定到widget中的一個(gè)button,當(dāng)該button被點(diǎn)擊的時(shí)候?qū)⒂|發(fā)

  1. Intent("ice4c.test.intent.BtnDown");  

的動(dòng)作,并將其廣播出去,由于AndroidManifest.xml中聲明了

  1. <action android:name="ice4c.test.intent.BtnDown"> 
  2. </action>  

這個(gè)動(dòng)作由MyAppWidget.java處理,因此onReceive(Context, Intent)將收到Intent("ice4c.test.intent.BtnDown"); 并對(duì)其進(jìn)行處理。

 <H5>此時(shí)widget就已經(jīng)可以完成了,但是若widget_provider.xml 中聲明了

  1. <SPAN style="COLOR: #ff0000">android</SPAN>:  
  2. <SPAN style="COLOR: #ff0000">configure</SPAN>=  
  3. <SPAN style="COLOR: #0000ff">"  
  4. ice4c.test.AppWidgetConfigure"</SPAN>    

2 ,那么就還需要一個(gè)類,對(duì)widget進(jìn)行配置。 </H5>

構(gòu)建AppWidgetConfigure.java

AppWidgetConfigure是一個(gè)常規(guī)的Activity,但需要在AndroidManifest.xml中添加一個(gè)<Activity> xml代碼

  1. <SPAN style="COLOR: #0000ff"> 
  2.   <</SPAN><SPAN style="COLOR: #800000">activity</SPAN>   
  3.    <SPAN style="COLOR: #ff0000">android</SPAN>:  
  4.    <SPAN style="COLOR: #ff0000">name</SPAN>=  
  5.    <SPAN style="COLOR: #0000ff">".AppWidgetConfigure"</SPAN> 
  6.    <SPAN style="COLOR: #0000ff">></SPAN>    
  7.   <SPAN style="COLOR: #0000ff"><</SPAN> 
  8.   <SPAN style="COLOR: #800000">intent</SPAN>-  
  9.   <SPAN style="COLOR: #ff0000">filter</SPAN> 
  10.   <SPAN style="COLOR: #0000ff">></SPAN>     
  11.    <SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">action</SPAN>   
  12.    <SPAN style="COLOR: #ff0000">android</SPAN>:<SPAN style="COLOR: #ff0000">name</SPAN>=  
  13.    <SPAN style="COLOR: #0000ff">"android.appwidget.action.APPWIDGET_CONFIGURE"</SPAN>   
  14.    <SPAN style="COLOR: #0000ff">/></SPAN>     
  15.  <SPAN style="COLOR: #0000ff"></</SPAN> 
  16.  <SPAN style="COLOR: #800000">intent</SPAN>-filter<SPAN style="COLOR: #0000ff">></SPAN>    
  17.  <SPAN style="COLOR: #0000ff"></</SPAN> 
  18.  <SPAN style="COLOR: #800000">activity</SPAN><SPAN style="COLOR: #0000ff">></SPAN>  

在widget被添加到桌面的時(shí)候,將會(huì)啟動(dòng)該Activity,提供界面和互動(dòng)對(duì)相應(yīng)的widget進(jìn)行配置。有名的“七鍵開關(guān)”就是使用的這樣的方式對(duì)添加到桌面的widget進(jìn)行配置的。

注意:在AppWidgetConfigure運(yùn)行時(shí)將不會(huì)觸發(fā)MyAppWidget.java的onUpdate(),因此需要在onCreate()中手動(dòng)調(diào)用該方法進(jìn)行配置,但該方法會(huì)在之后的update中被調(diào)用。

配置widget的一般步驟(android api中提供的步驟):

從啟動(dòng)這個(gè)Activity的Intent獲得widget的idjava代碼

  1. Intent intent = getIntent();     
  2.  
  3.  Bundle extras = intent.getExtras();     
  4.  if (extras != null) {     
  5.      mAppWidgetId = extras.getInt(     
  6.              AppWidgetManager.EXTRA_APPWIDGET_ID,      
  7.              AppWidgetManager.INVALID_APPWIDGET_ID);     
  8.  }  

對(duì)widget進(jìn)行配置

配置完成使用AppWidgetManager 的getInstance(context)方法獲得widget管理器的實(shí)例java代碼

  1. AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  

通過updateAppWidget(mAppWidgetId, RemounViews)的方式更新widgetjava代碼

  1. RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);     
  2. appWidgetManager.updateAppWidget(mAppWidgetId, views);  

生成返回的Intent,設(shè)置返回值,結(jié)束Activityjava代碼

  1. Intent resultValue = new Intent();     
  2.  resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);     
  3.  setResult(RESULT_OK, resultValue);     
  4. finish(); 

另外,可以在Activity創(chuàng)建時(shí)設(shè)置setResult(RESULT_CANCELED);若配置時(shí)用戶按返回鍵,則不會(huì)創(chuàng)建任何實(shí)例。

終于寫完了,不過其中還有許多不懂的地方,以后的學(xué)習(xí)中慢慢再了解吧。

小結(jié):Widget初學(xué)者文檔之Widget開發(fā)初體驗(yàn)的內(nèi)容介紹完了,希望通過Widget開發(fā)初體驗(yàn)內(nèi)容的學(xué)習(xí)能對(duì)你有所幫助。

責(zé)任編輯:zhaolei 來源: 博客園
相關(guān)推薦

2011-09-08 10:38:37

Widget

2011-08-04 18:01:07

IOS Cocoa Touc

2011-09-14 09:49:41

Android開發(fā)

2011-08-10 16:44:56

iPhone代理設(shè)計(jì)模式

2011-09-07 14:20:42

Android Wid組件

2011-08-24 09:54:05

Lua字符春交互

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

2011-08-10 19:01:18

Objective-C

2011-08-29 15:45:59

Lua函數(shù)

2011-08-17 12:03:36

Objective-C

2011-06-21 10:12:22

QT 窗口 刷新

2011-08-25 15:51:10

Lua腳本

2011-08-24 17:19:20

Lua源文件

2011-08-02 14:48:04

IOS 多任務(wù)

2011-08-12 10:27:52

Objective-C對(duì)象

2011-08-11 10:50:08

xcode調(diào)試文件

2011-09-09 20:14:58

Android Wid

2011-05-03 15:13:23

BlackBerryWidget
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)