亚洲Aⅴ无码Av红楼在线观看_国产午夜福利涩爱AⅤ_国产sm调教一区二区三区_精品人妻一区二区三区不卡毛片

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Android Launcher開發(fā)之桌面小部件AppWidget詳解

發(fā)布時間:  2012/8/9 17:19:58

導(dǎo)讀:先簡單說說Widget的原理。Widget是在桌面上的一塊顯示信息的東西,也通過單擊Widget跳轉(zhuǎn)到一個程序里面。而系統(tǒng)自帶的程序,典型的Widget是music,這個Android內(nèi)置的音樂播放小程序。先簡單說說Widget的原理。Widget是在桌面上的一塊顯示信息的東西,也通過單擊Widget跳轉(zhuǎn)到一個程序里面。而系統(tǒng)自帶的程序,典型的Widget是music,這個Android內(nèi)置的音樂播放小程序。這個是典型的Widget+app應(yīng)用。就是一個程序既可以通過Widget啟動,也可以通過App啟動。Widget就是一個AppWidgetProvider+一個UI界面顯示(預(yù)先綁定了好多Intent),界面上的信息可以通過程序控制而改變,單擊Widget,上的控件只能激發(fā)發(fā)送一個Intent,或發(fā)出一個Service的啟動通知。而AppWidgetProvider可以攔截這個Intent,而進(jìn)行相應(yīng)的處理(比如顯示新的信息)。Android開發(fā)里要大量的通過手動的方式配置好多xml文件。這對于.net開發(fā)來說不得不說是個夢靨呀。這也許也是一般的java程序員比.net程序的工資高的一個原因吧。畢竟做Java開發(fā),特別是Android開發(fā),確實很累。你可以看下源碼對照著源碼進(jìn)行講解。我們先開發(fā)一個比較簡單的Widget應(yīng)用,實現(xiàn)的主要功能是可以通過的不斷變化,而不斷的顯示當(dāng)前時間。首先,要自己手動建一個名為xml的文件夾。建一個xml文件,加入如下代碼:

1.<appwidget-providerxmlns:Android="http://schemas.android.com/apk/res/android
2. 
3.        Android:minHeight="72px"  4. 
5.        Android:minWidth="72px"    6. 
7.      Android:updatePeriodMillis="3800000"android:initialLayout="@layout/main">  8. 
9. </appwidget-provider> 
這個是Widget的顯示設(shè)置,是對Widget屬性的一個配置文件這個Android:minHeight是Widget的高,這個android:minWidth 是Widget的寬。這個android:updatePeriodMillis屬性是設(shè)置Widget頁面的 更新頁面的時間的頻率。而這個android:initialLayout屬性是表示的是初始化頁面的布局,Android里畫UI的地方都是通過xml文件,也可以通過代碼程序來畫,不過這樣畫的太麻煩了。 看下以下的文件系統(tǒng),res文件夾是系統(tǒng)存放資源文件的目錄。以drawable開頭的文件夾是存放圖片資源的文件夾。而后面的hdpi和ldpi等,都是平常在不同的狀態(tài)如(橫屏與豎屏?xí)r)系統(tǒng)調(diào)用不同的圖片資源。Layout就是存放的一般都是xml,UI設(shè)計就是在這個layout文件夾里。Value里放的strings.xml就是從程序里分離的字符串,在實現(xiàn)國際化的時候可能會用到。 看看layout里的main.xml ,只有一個空間就是TextView,這個是用來顯示時間用的。 建一個類TestAppWidget繼承于AppWidgetProvider,而AppWidgetProvider繼承與android.content.BroadcastReceiver,所以TestAppWidget就是一個攔截處理Intent的BroadcastReceiver,這些Intent只能在Androidmainfest里設(shè)置來攔截處理。

1.public class TestAppWidget extends AppWidgetProvider { 
2.  private static final String TAG="TestAppWidget";  3.  private static final String FRESH="com.sinxiao.app.fresh";  4.   private Context mContext ;  5.   private boolean run = true ;  6.   BroadcastReceiver mBroadcast =newBroadcastReceiver() {     
7. 
8.    
9. 
10.      public void onReceive(Contextcontext, Intent intent) {     11.       String action =intent.getAction(); 
12.     
13.       if(action.equals(Intent.ACTION_TIME_TICK)) {  14.    
15.       mContext.sendBroadcast(newIntent(FRESH)); 
16.    
17.    } 
18.    
19.   } 
20.     
21.  }; 
22.     
23.   /** 24.    
25.   * 通知Widget每個1秒刷新一次
26.    */ 
27.  Thread myThread = new  28.    Thread(){ 
29.     
30.    public void run() {  31.    
32.    while (run) {  33.     
34.    try {  35.    
36.    Thread.sleep(1000);  37.     } catch (InterruptedException e) {  38.    e.printStackTrace(); 
39.    } 
40.    mContext.sendBroadcast(newIntent(FRESH));//通知刷新Widget的Intent   41.    } 
42.   }; 
43.    }; 
44.    
45.    @Override   46.    public void onUpdate(Contextcontext, AppWidgetManager appWidgetManager,  47.     
48.   int[] appWidgetIds) {  49.       //  用來給Widget刷新界面顯示   50.    Log.d(TAG,"onUpdate");  51.   super.onUpdate(context,appWidgetManager, appWidgetIds);  52.    mContext = context; 
53.    RemoteViews views = newRemoteViews(context.getPackageName(),R.layout.main); 
54.    Calendar 
55.    cal=Calendar.getInstance(); 
56.    System.out.println(cal.getTime().toLocaleString()); 
57.    views.setTextViewText(R.id.txttim,cal.getTime().toLocaleString()); 
58.    appWidgetManager.updateAppWidget(appWidgetIds,views); 
59.   myThread.start(); 
60.    /** 61.   * 本類作為一個bracastReveiver能自己再,注冊個監(jiān)聽器
62.   (可以取消注釋,看報什么錯誤)
63.  */ 
64.    //   65.   context.registerReceiver(mBroadcast,new IntentFilter(Intent.ACTION_TIME_TICK));  66.    } 
67.    @Override  68.   public void onReceive(Contextcontext, Intent intent) {  69.    Log.d(tag,"onReceive");  70.    String action =intent.getAction(); 
71.    Log.d(tag, "theaction is "+action);  72.    if (FRESH.equals(action)){  73.    showTime(context); 
74.    }elseif(Intent.ACTION_TIME_TICK.equals(action)){ 
75.    showTime(context); 
76.  } 
77.   super.onReceive(context,intent);  78.    } 
79.    private void showTime(Contextcontext) {  80.    RemoteViews views = newRemoteViews(context.getPackageName(),R.layout.main); 
81.    Calendar 
82.    cal=Calendar.getInstance(); 
83.   views.setTextViewText(R.id.txttim,cal.getTime().toLocaleString()); 
84.    ComponentName thisWidget =new ComponentName(context,TestAppWidget.class);  85.    AppWidgetManager.getInstance(context).updateAppWidget(thisWidget,views); 
86.    } 
87.    public void onDisabled(Contextcontext) {  88.    Log.d(tag,"onDisabled");  89.    super.onDisabled(context);  90.    run = false ;  91.    } 
92.    } 


本文出自:億恩科技【www.allwellnessguide.com】

服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線