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

Widget應(yīng)用學(xué)習(xí)筆記

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

Widget應(yīng)用學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)Widget應(yīng)用,Widget小組件可以放在android桌面上的小組件,其中的布局只支持ImageView TextView Button等簡單組件。

下面以在桌面上顯示Hello World!為例

首先建立自己Widget類 必須要繼承AppWidgetProvider 

然后重寫onUpdate()方法

  1. public class MyWidget extends AppWidgetProvider {  
  2.     @Override  
  3.     public void onUpdate(Context context, AppWidgetManager appWidgetManager,  
  4.             int[] appWidgetIds) {  
  5.         //獲得一個遠程試圖對象  
  6.         RemoteViews  views = new RemoteViews(context.getPackageName(), R.layout.main);  
  7.         //修改試圖中的文本  
  8.         views.setTextViewText(R.id.text, "Hello World!" );  
  9.         //更新widget  
  10.         appWidgetManager.updateAppWidget(appWidgetIds, views);  
  11.     }  

onUpdate方法中context參數(shù)是向widget發(fā)送更新請求的上下文環(huán)境,appWidgetmanager可以當作整個widget的管理者,它的updateAppWidget()方法可以更新指定wighet的view,appWidgetIds系統(tǒng)發(fā)出更新請求時更新的所有widget的ID集合,新建widget時整個數(shù)組中只有一個值就是當前widget的id,1.5版本后固定每30分鐘系統(tǒng)會自動更新一次widget,系統(tǒng)自動更新,重啟手機時都會執(zhí)行onUpdate方法這時appWidgetIds就是桌面上所有widget的ID的集合。

寫一個appwidget.xml文件設(shè)置widget的屬性

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <appwidget-provider 
  3. xmlns:android="http://schemas.android.com/apk/res/android"   
  4.   android:minWidth="144dip" android:minHeight="72dp" 
  5. android:configure="com.iee_2005.weather.WidgetConfigure" 
  6. android:initialLayout="@layout/main"> 
  7. </appwidget-provider> 

其中 minWidth屬性是widget窗口最小寬度 minHeight屬性是widget的最小高度initaialLayout是widgit的布局文件configure 屬性是widget的配置activity的名稱(注意:必須把包名也寫全)這個屬性可以沒有,如果定義了這個屬性那么添加widget的時候會先打開這里指定的activity用來配置這個widget   還有一個updatePeriodMillis屬性是用來設(shè)置自動更新時間的但在1.5版本后已經(jīng)廢除改為固定30分鐘

widget配置activity

  1. public WidgetConfigure extends Activity  
  2. {  
  3.     onCreate()...  
  4.      .....  

注意這個activity在AndroidManiFest中注冊時的寫法

  1. <activity android:name=".WidgetConfigure"> 
  2.             <intent-filter> 
  3.                 <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> 
  4.             </intent-filter> 
  5.  
  6. </activity> 

然后再androidManiFest.xml中注冊widget,這里可以看到widget其實一就是一個廣播接收器

  1. <receiver android:name=".MyWidget" android:label="時間"> 
  2.            <intent-filter > 
  3.                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
  4.            </intent-filter> 
  5.            <meta-data android:name="android.appwidget.provider" 
  6.             android:resource="@xml/appwidget"/> 
  7.    </receiver> 

應(yīng)該是必須這么寫 resource屬性的值是widget配置文件的位置

然后運行 在手機桌面上長按或 點menu鍵->添加  添加小組件  找到我們寫的widget就可以看到效果了

定時更新widget

從sdk1.5以后appwidget.xml文件中的updatePeriodMillis屬性被廢除了 所以不能用直接修改updatePeriodMillis屬性來實現(xiàn)定時更新widget

想要定時更新widget就要用Service,創(chuàng)建一個Service用來計時并更新widget內(nèi)容 在widget被調(diào)用時開啟服務(wù)public class MyService extends Service implements Runnable{

  1.   private AppWidgetManager appWidgetManager;  
  2.   private ComponentName componentName;  
  3.   private Handler mHandler;  
  4.   private int h,m,s;  
  5.   private String text;  
  6.   private SimpleDateFormat dateFormat;  
  7.   /*  
  8.  
  9.  * 此方法為Service必須有的方法  此例中沒有用到  
  10.  
  11.   */  
  12.  
  13.  public IBinder onBind(Intent intent) {  
  14.       return null;  
  15.   }  
  16.  
  17.  /*  
  18.  
  19.  *  服務(wù)創(chuàng)建時執(zhí)行整個方法 一般用來初始化  
  20.  
  21.  */  
  22.   public void onCreate() {  
  23.       appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());  
  24.       componentName = new ComponentName(getApplicationContext(), MyWidget.class);  
  25.       mHandler = new Handler();  
  26.       dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");  
  27.         
  28.   }  
  29.   /*  
  30.  
  31.   * 開始服務(wù)  ,如果服務(wù)已經(jīng)存在 每次應(yīng)用發(fā)送服務(wù)移動時執(zhí)行一次onStart方法而不執(zhí)行onCreate  
  32.  
  33. 這里使用Handler實例對象上傳一個線程到UI線程列隊中用來更新widget的UI即Views  
  34.  
  35.  */      
  36.  
  37.   public void onStart(Intent intent, int startId) {  
  38.       mHandler.post(this);  
  39.   }  
  40.   /*  
  41.  
  42. * 服務(wù)被銷毀時執(zhí)行此方法,撤銷更新線程  
  43.  
  44. */  
  45.  
  46.  
  47.   public void onDestroy() {  
  48.       Log.i("mylog","stop");  
  49.       mHandler.removeCallbacks(this);  
  50.   }      
  51.  
  52. /*  
  53.  
  54. *更新widget的views的線程  
  55.  
  56. /  
  57.  
  58.   public void run() {  
  59.       RemoteViews views = new RemoteViews(getApplicationContext().getPackageName(),R.layout.main);  
  60.       views.setTextViewText(R.id.text, dateFormat.format(new Date()));  
  61.       appWidgetManager.updateAppWidget(componentName, views);  
  62.       mHandler.postDelayed(this, 1000);  
  63.       Log.i("mylog", "update");  
  64.   }  

然后記得在AndroidManiFest文件中注冊Service

  1. <service android:name=".MyService"> 
  2.             <intent-filter > 
  3.                 <action android:name="com.UPDATE_TIME"/> 
  4.             </intent-filter> 
  5. </service> 

這樣service就創(chuàng)建完畢了,最后在widget中的onUpdate方法中開啟服務(wù)

  1. public void onUpdate(Context context, AppWidgetManager appWidgetManager,  
  2.             int[] appWidgetIds) {  
  3.       Intent service = new Intent("com.UPDATE_TIME");  
  4.  
  5.   context.startService(service);  
  6.  
  7.     } 

這就實現(xiàn)了一個可以顯示系統(tǒng)時間并自動根新的widget。

小結(jié):Widget應(yīng)用學(xué)習(xí)筆記的內(nèi)容介紹完了,希望通過Widget內(nèi)容的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-09-07 16:36:00

Qt Widget

2011-09-07 10:34:48

Android Wid

2011-09-07 11:15:25

2011-09-07 17:19:16

Web widget

2011-09-08 15:40:45

Android Wid組件

2011-09-07 16:28:46

QT WidgetQWidget

2011-09-08 16:07:13

Widget配置文件

2011-09-08 11:18:53

Widget

2011-09-09 17:59:26

QT Widget

2011-09-08 17:48:33

Web Widget

2011-09-09 19:23:52

Widget

2011-09-08 14:50:51

JavascriptWidget

2011-03-08 16:30:24

Proftpd

2011-08-09 17:29:29

iPhone文件屏幕

2011-09-09 13:59:17

Android wid

2011-09-08 13:11:07

Android Wid實例

2011-09-07 13:00:36

2011-09-07 13:42:36

Android Wid實例

2011-08-08 14:57:46

iPhone Autoreleas Property

2011-08-19 15:16:41

XCodeUserScripts腳本
點贊
收藏

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