天天看點

Android學習筆記之AppWidget

什麼是AppWidget?AppWidget就是我們平常在桌面上見到的那種一個個的小視窗,利用這個小視窗可以給使用者提供一些友善快捷的操作。

今天的目标就是怎麼建立一個簡單的AppWidget。

首先我先把目錄結構展示一下,友善大家了解。

Android學習筆記之AppWidget

第一步:我們需要在res目錄下建立一個folder,可以命名為xml(但這并不是必須的,你也可以換成你喜歡的名字)。然後在這麼目錄下建立一個xml檔案。我的appwidget.xml檔案代碼如下:

小注解:

在android的命名空間下聲明了appwidget 的最小的高度、寬度、以及更新的時間(注意是以毫秒為機關的)和最重要的綁定的布局檔案(所謂布局檔案就是展示到桌面上的界面的外觀)。

第二步:下面的這個檔案是在上面的appwidget.xml中的initialLayout屬性中綁定的xml布局檔案,即example_widget.xml,代碼如下:

第三步:實作了布局展示界面,下面自然而然的,我們就會想到要怎麼讓這個布局界面展示出來,是以就必須有一個provider,是以,下面就需要建立一個繼承了AppWidgetProvider的執行個體,來完成這一個功能。我的檔案名稱命名為Widget.java.

第四步:這也是最為關鍵的一步,因為前面的工作都是為這一步來打基礎的。那麼要怎麼做捏?答案就是清單檔案,在清單檔案中進行聲明就可以了。我的代碼如下:

在這裡我麼也不難看出,原來widget也就是個廣播事件啊,是以需要使用receiver ,然後接下來是一個inent-filter過濾器,功能就是過濾出符合要求的action,在這裡當然是widget動作了。

接下來有一個meta-data中繼資料解釋,作用就是對這個widget進行解釋的作用,也是為了讓android系統知道這到底是個什麼東西。(偷偷告訴你,一般這兩個要點是固定的表達)

好了,萬事具備,隻欠”運作“了,接下來就是程式運作之後的界面。

Android學習筆記之AppWidget

。上面的那一行文字就是程式運作之後就可以看到的結果,也就是我們”自制“的一個AppWidget了。(說實話,真的是不太好看)。

回顧與總結:

1、怎麼實作的這個AppWidget?先是在res檔案夾下建立一個xml 檔案夾,并在裡面添加一個appwidget-provider檔案,再就是寫一個用于呈現内容的布局檔案。接下來就是一個繼承自AppWidgetProvider的類的建立,然後再清單檔案中進行相關項的聲明就可以了。

2、邏輯思路很重要,每一步的銜接是思路的引導點。

3、這裡僅僅是一個簡單的小例子,接下來要做的就是如何讓這個widget和我們的系統進行互動。

4、好了,大緻就是這樣,歡迎廣大博友留言評論,我一定會虛心的接受,希望能和你們一起進步!

—————————–這裡是華麗的分界線——————

上面的是建立一個簡單的appWidget的示例,下面是關于如何實作這些Widget如何實作相關的動作偵聽的。

知識點準備:

我們應該知道的是,android的widget的程序與程式運作的程序并不是同一個程序,這就意味着我們不能像往常一樣簡單的使用一個setOnClickListener方法了,因為這樣做是完不成相關的動作的偵聽的功能的。那麼問題來了,我們要怎麼實作這些動作的互動呢?

别着急,答案是采用RemoteViews,顧名思義就是采用”遠端的“方式來實作相關的處理操作。接下來讓我們一起來看一下具體的實作流程吧。

第一步,在之前的appWidget的布局檔案中添加一個按鈕,用來實作布局。

第二步:然後再Widget.java這個AppWidgetProvider的實作類的onUpdate方法中實作相關的代碼。為了更好地展示效果,我們可以建立一個Activity,用來呈現點選按鈕之後跳轉的界面的展示。我命名為RenewActivity.java.相關源碼如下所示

RenewActivity.java

第三步:不要忘記在清單檔案中進行Activity的聲明,否則你是看不到界面的效果的。

效果圖如下所示:

Android學習筆記之AppWidget
Android學習筆記之AppWidget

小總結:

在Widget的onUpdate方法中,我們使用到了RemoteViews類的執行個體,起作用就不再詳細的闡述,這裡就直接解釋代碼的功能吧。如上,建立其執行個體的時候需要兩個參數分别為上下文對象的包名和widget的”布局“,然後在進行對按鈕的時間偵聽的時候使用到了一個叫pendingIntent的執行個體,其作用就是将遠端的消息資訊傳達給相應的處理邏輯中,進而實作對widget上按鈕的動作的偵聽處理。然後使用appWidgetManager進行更新操作就可以了!如此便可以完成我們的代碼的邏輯。

繼續閱讀