1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        Android Launcher開發之桌面小部件AppWidget詳解

        發布時間:  2012/8/9 17:19:58

        導讀:先簡單說說Widget的原理。Widget是在桌面上的一塊顯示信息的東西,也通過單擊Widget跳轉到一個程序里面。而系統自帶的程序,典型的Widget是music,這個Android內置的音樂播放小程序。先簡單說說Widget的原理。Widget是在桌面上的一塊顯示信息的東西,也通過單擊Widget跳轉到一個程序里面。而系統自帶的程序,典型的Widget是music,這個Android內置的音樂播放小程序。這個是典型的Widget+app應用。就是一個程序既可以通過Widget啟動,也可以通過App啟動。Widget就是一個AppWidgetProvider+一個UI界面顯示(預先綁定了好多Intent),界面上的信息可以通過程序控制而改變,單擊Widget,上的控件只能激發發送一個Intent,或發出一個Service的啟動通知。而AppWidgetProvider可以攔截這個Intent,而進行相應的處理(比如顯示新的信息)。Android開發里要大量的通過手動的方式配置好多xml文件。這對于.net開發來說不得不說是個夢靨呀。這也許也是一般的java程序員比.net程序的工資高的一個原因吧。畢竟做Java開發,特別是Android開發,確實很累。你可以看下源碼對照著源碼進行講解。我們先開發一個比較簡單的Widget應用,實現的主要功能是可以通過的不斷變化,而不斷的顯示當前時間。首先,要自己手動建一個名為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的顯示設置,是對Widget屬性的一個配置文件這個Android:minHeight是Widget的高,這個android:minWidth 是Widget的寬。這個android:updatePeriodMillis屬性是設置Widget頁面的 更新頁面的時間的頻率。而這個android:initialLayout屬性是表示的是初始化頁面的布局,Android里畫UI的地方都是通過xml文件,也可以通過代碼程序來畫,不過這樣畫的太麻煩了。 看下以下的文件系統,res文件夾是系統存放資源文件的目錄。以drawable開頭的文件夾是存放圖片資源的文件夾。而后面的hdpi和ldpi等,都是平常在不同的狀態如(橫屏與豎屏時)系統調用不同的圖片資源。Layout就是存放的一般都是xml,UI設計就是在這個layout文件夾里。Value里放的strings.xml就是從程序里分離的字符串,在實現國際化的時候可能會用到。 看看layout里的main.xml ,只有一個空間就是TextView,這個是用來顯示時間用的。 建一個類TestAppWidget繼承于AppWidgetProvider,而AppWidgetProvider繼承與android.content.BroadcastReceiver,所以TestAppWidget就是一個攔截處理Intent的BroadcastReceiver,這些Intent只能在Androidmainfest里設置來攔截處理。

        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能自己再,注冊個監聽器
        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.endtimedelusion.com】

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

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

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线