首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 12157|回復(fù): 0
上一主題 下一主題
[教程]

第三十五講:App Widget入門指南

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
>  本講內(nèi)容: Android中桌面小部件、App Widget的開發(fā)入門指導(dǎo)一、Widget 、App Widget 、Web App 的概念Widget最初的概念是98年一個叫Rose的蘋果工程師提出,直到2003年的時候才正式為大家所知,不過隨后無數(shù)大公司都開始接受并應(yīng)用這一思路?,F(xiàn)在我們看到在蘋果系統(tǒng)里按下F4彈出的Dashboard里的小工具叫Widget,在Windows 7里側(cè)邊欄上的那些漂亮的小工具叫Gadget(widget變體?),除此以外還有yahoo Widget等等Widget產(chǎn)品。他們有一個共同的特點就是采用前臺Web開發(fā)用的技術(shù)(譬如HTML、CSS、Javascript)來制作的小工具、小部件。   
   
  在Android系統(tǒng)里,幾乎每個可視化的View組件都叫Widget,起這個名字可能當時是為了趕時髦。   
   
  App Widget是從Android 1.5以后才有的東東,就是可以放在Android桌面上的應(yīng)用程序小組件。這一點上看他的功能很像windows的側(cè)邊欄小工具,可惜的是他的采用技術(shù)并不是HTML等技術(shù)。當然App Widget才是我們本講的主角,本來他應(yīng)該順理成章叫做Widget的,至少也要叫做Gadget吧,可惜這個名字已經(jīng)被他自己的系統(tǒng)占用了,所以只好改名叫App Widget。   
   
  最后講一下Web App 或者說是Android Web Application,也許叫 mobile web application 更準確些。我們發(fā)現(xiàn)現(xiàn)在智能機系統(tǒng)平臺很多,譬如iOS、Android、Windows Phone 、WebOS、BlackBerry等等,它們采用的技術(shù)框架也各不相同,有沒有辦法寫一個程序在各個系統(tǒng)上都能運行呢?答案是肯定的,寫基于Webkit的瀏覽器的應(yīng)用即可。我們使用 HTML5、CSS3、JavaScript、WebKit 等技術(shù)來寫的Web Application也許是今后的一個大潮流也說不準啊。有機會我們再講講Android Web Application 的開發(fā)。   
   
  二、APP Widget 的簡單例子: Hello App Widget!   
   
  App Widget的技術(shù)實現(xiàn)有那么一點點繞,我們用一個最簡單的例子HelloAppWidget來操作一遍,然后再針對這個例子做講解,也許你會理解的更快些。   
   
  1、新建一個項目 Lesson35_HelloAppWidget ,注意創(chuàng)建時可以不選Create Activity   
   
     
   
   
  2、準備好一個Widget的顯示布局文件 layout/widget.xml 內(nèi)容如下:   
   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center">   
    <textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/textView1" android:text="歡迎進入App Widget的世界!" android:textcolor="#ff0000ff">   
    </textview></linearlayout>        
復(fù)制代碼
  3、準備好一個Widget的配置文件 xml/provider_info.xml,該文件配置了widget可以占用的屏幕長寬、更新頻率,所顯示的布局文件(就是上面的那個布局文件)等,其內(nèi)容如下:   
   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <!-- appwidget-provider Widget的配置文件  -->   
    <!-- android:minWidth 最小寬度 -->   
    <!-- android:minHeight 最小高度 -->   
    <!-- android:updatePeriodMillis 組件更新頻率(毫秒) -->   
    <!-- android:initialLayout 組件布局XML的位置 -->   
    <!-- android:configure Widget設(shè)置用Activity -->   
    <appwidget -provider="" xmlns:android="http://schemas.android.com/apk/res/android" android:initiallayout="@layout/widget" android:updateperiodmillis="86400000" android:minheight="72dp" android:minwidth="294dp">   
    </appwidget>
復(fù)制代碼
  4、準備好一個處理widget請求的Java文件,basic.android.lesson35包下的HelloWidgetProvider,他繼承了AppWidgetProvider類,在本例中沒有任何請求處理的具體代碼,我在java文件中寫了大量注釋,方便你的理解。內(nèi)容如下:   
   
  1. package basic.android.lesson35;   
       
    import android.appwidget.AppWidgetManager;   
    import android.appwidget.AppWidgetProvider;   
    import android.content.Context;   
    import android.content.Intent;   
    import android.util.Log;   
       
    // AppWidgetProvider 是 BroadcastReceiver 的子類,本質(zhì)是個 廣播接收器,它專門用來接收來自 Widget組件的各種請求(用Intent傳遞過來),所以如果讓我給他起名的話 我會給他命名為AppWidgetReceiver,每一個Widget都要有一個AppWidgetProvider.   
    public class HelloWidgetProvider extends AppWidgetProvider {   
       
            //每個請求都會傳遞給onReceive方法,該方法根據(jù)Intent參數(shù)中的action類型來決定自己處理還是分發(fā)給下面四個特殊的方法。   
            @Override   
            public void onReceive(Context context, Intent intent) {   
       
                    Log.i("yao", "HelloWidgetProvider --> onReceive");   
                    super.onReceive(context, intent);   
            }   
       
            //如果Widget自動更新時間到了、或者其他會導(dǎo)致Widget發(fā)生變化的事件發(fā)生,或者說Intent的值是android.appwidget.action.APPWIDGET_UPDATE,那么會調(diào)用onUpdate,下面三個方法類似   
            @Override   
            public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {   
                    //AppWidgetManager 顧名思義是AppWidget的管理器,appWidgetIds 桌面上所有的widget都會被分配一個唯一的ID標識,那么這個數(shù)組就是他們的列表   
                    Log.i("yao", "HelloWidgetProvider --> onUpdate");   
                    super.onUpdate(context, appWidgetManager, appWidgetIds);   
            }   
       
            //當一個App Widget從桌面上刪除時調(diào)用   
            @Override   
            public void onDeleted(Context context, int[] appWidgetIds) {   
                    Log.i("yao", "HelloWidgetProvider --> onDeleted");   
                    super.onDeleted(context, appWidgetIds);   
            }   
       
            //當這個App Widget第一次被放在桌面上時調(diào)用(同一個App Widget可以被放在桌面上多次,所以會有這個說法)   
            @Override   
            public void onEnabled(Context context) {   
                    Log.i("yao", "HelloWidgetProvider --> onEnabled");   
                    super.onEnabled(context);   
            }   
       
            //當這個App Widget的最后一個實例被從桌面上移除時會調(diào)用該方法。   
            @Override   
            public void onDisabled(Context context) {   
                    Log.i("yao", "HelloWidgetProvider --> onDisabled");   
                    super.onDisabled(context);   
            }   
       
    }
復(fù)制代碼
    6、編譯并運行程序,我們知道這種Widget程序,即使裝完了也不會在程序列表中出現(xiàn),因為它根本就沒有main Activity,下面我給不清楚的同學(xué)說一下如何把一個widget放到桌面上:   
   
     
   
在模擬器上桌面上長按,等待彈出下面對話框,   
   
     
   
   
選擇窗口小部件   
   
     
   
   
選擇Hello,App Widget   
   
   
     
   
   
  OK,看到桌面上出來一行看起來蠻舒服的一行藍色小字了嗎,恭喜你,你已經(jīng)進入了 App widget 的世界。當然后面的內(nèi)容更精彩,我們會學(xué)習(xí) PendingIntent 和 RemoteViews 等和 App widget的配合,制作更加實用的App Widget。   
   
  三、桌面上的音樂播放器小部件(待續(xù))   
   
   
   
   
   

上一篇:android Apk自動更新方法
下一篇:項目實戰(zhàn)(新聞客戶端)步步為營
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-12-28 01:29 , Processed in 0.196939 second(s), 13 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表