(原創 開源)AppWidge的使用—桌面便利貼

Android平臺的一大特點就是支持桌面插件——AppWidget。html

且不說,AppWidget是否會影響系統的流暢性,AppWidget確實是知足了用戶個性化和快捷操做的須要。android

常見的AppWidget有四種基本形態:git

信息型:程序員

 

想當年HTC的翻頁時鐘就大紅大紫過好長一陣子。github

 

控制型:算法

 

 

集合型:數據庫

 

 

混合型:app

 

其實大部分的AppWidget都是屬於這個類型的,即可以顯示信息,又提供控制功能。ide

 

總結一下:佈局

AppWidget提供了一個快速的途徑去得到咱們想要的信息

提供一個快捷的手段去控制應用

一些設計良好的AppWidget確實能夠爲手機增色很多

 

本人有必定的「應用潔癖」,通常只用那些沒有太多亂七八糟功能的應用。一直在找一款簡單實用的便籤應用。對於我我的而言,語音記錄、雲同步之類的功能都是比較雞肋的。我以前用過兩款:OPPO的NearMe筆記和小米便籤。都還能夠,至少,沒有太多沒用的功能。

其中小米便籤仍是開源的:https://github.com/MiCode/Notes(開源什麼的最有愛了~~~)能夠學到很多的東西。

 

當程序員有一個好處,就是當用其餘應用都不爽的時候,能夠本身開發一個~~~

我本身的需求以下:

儘量的輕量:不經常使用的功能一概不要。

界面要好看一點:畢竟,程序員也是要裝X的~~~

 

最終的效果是這樣的:

 

點擊能夠進入編輯:

 

 

點擊左上角能夠換膚,點擊那個「T」能夠進行字體調節:

 

調節過程還能夠實時預覽。

好了,下面不廢話了,進入開發時間!!!

官方文檔地址:http://developer.android.com/intl/zh-cn/guide/topics/appwidgets/index.html

 

一個AppWidget須要用到下面的東東:

AppWidgetProviderInfo:這貨是描述整個AppWidget的元信息的。好比更新的頻率,初始大小等。它被放在/res/xml/目錄下,是一個xml文件。好比個人這個應用的代碼以下:

<?xml version="1.0" encoding="utf-8"?>

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:configure="com.stickynote.EditActivity" android:initialLayout="@layout/widget_note" android:minHeight="40dp" android:minWidth="250dp" android:previewImage="@drawable/icon_app" android:updatePeriodMillis="0" />

它的一些屬性解釋以下:

configure:當一個AppWidget第一次生成時能夠啓動一個Activity來配置它,該屬性是可選的。

initialLayout:AppWidget的佈局文件。

minHeight和minWidth:這兩個參數比較複雜,最好參看官方文檔,由於不一樣版本下仍是不一樣的,好比從4.1開始還支持AppWidget大小的改變這些。

previewImage:就是AppWidget的預覽圖,不設置的話就是App的圖標。

UpdatePeriodMillis:更新頻率,這個也須要特別說明一下,在新版本的系統中(貌似是4.0)開始,更新頻率是不能設置太小的,由於要考慮到耗電問題。因此,若是須要作到「實時」更新的話,就須要經過其餘手段了。

其餘屬性看文檔吧~~~

 

AppWidgetProvider:這傢伙封裝了BroadcastReceiver,並重寫了onReceive方法。因此通常狀況下,咱們不須要再去重寫onReceive方法了。而是按須要去重寫如下的幾個方法:

onEnabled:當這個App的第一個AppWidget建立時調用,也就是說添加第十個AppWidget時,是不會調用的。

onUpdate:當AppWidget更新時調用,好比到了更新的時間。注意,好比當手機從新啓動時,這個方法也會被調用的。

onDeleted:當AppWidget被刪除時調用。

onDisabled:當最後一個AppWidget被刪除時調用。與onEnabled對應。

 

View layout:AppWidget的佈局文件,與Activity的佈局文件相似。但不是全部的控件、容器均可以用於AppWidget的。具體支持的控件請看文檔:http://developer.android.com/intl/zh-cn/guide/topics/appwidgets/index.html#CreatingLayout

 

其實上面的東西都是官方文檔的「中文簡化版」,閱讀英文文檔仍是至關重要的。

 

項目的文件結構:

 

其實本人不是怎麼喜歡貼代碼,由於我本身的看博客的習慣就不喜歡看代碼(算法博文除外),因此我通常只寫原理,代碼的話本身下載運行一下應該我以爲更好~~~

 

AppWidgetProvider的配置:

AppWidgetProvider的本質仍是一個廣播接收器,因此在AndroidManifest.xml中仍是使用一個receiver標籤來配置:

<receiver android:name="com.stickynote.widget.NoteWidgetProvider" >

         <!-- 固定寫法 -->

         <intent-filter>

                   <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

         </intent-filter>

         <!-- name也是固定的,resource就是那個AppWidget的配置文件 -->

         <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_note" />

</receiver>

添加AppWidget進彈出編輯Activity:

這個過程分爲二步,第一:在AppWidgetProviderInfo中添加

android:configure="com.stickynote.EditActivity"

注意,這個Activity必定要帶包名的!

第二:在Activity的配置中,必定要添加一個intent-filter:

<activity android:name="com.stickynote.EditActivity" android:theme="@android:style/Theme.Holo.NoActionBar" >

         <intent-filter>

                   <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />

         </intent-filter>

</activity>

更新(設置)AppWidget:

更新AppWidget是經過AppWidgetManager的updateAppWidget(int appWidgetId, RemoteViews views)這個方法來實現的。

其中,RemoteViews就是AppWidget的視圖,咱們要對其中的「子控件」進行設置,只能經過它提供的setXxx方法實現,有些方法是能夠直接使用的,好比其中的TextView:

 

若是想對其中的佈局設置背景,這時就只有經過好比setInt這個方法來「曲線救國」了:

views.setInt(R.id.rl_widget_note, "setBackgroundResource", bgRes); // 設置背景

同理,設置字體大小能夠經過以下方法實現:

views.setFloat(R.id.tv_widget_note_content, "setTextSize", note.textSize); // 設置字體大小

注意:在AppWidget啓動時調用的Activity更新以後,必定要setResult!不然沒有結果。

Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, note.appWidgetId); setResult(RESULT_OK, resultValue); finish();

AppWidget的東西差很少了,剩下的東西就是數據庫啊,還有一些界面之類的東西,應該說,東西不大,但該有的都有了,並且我的以爲把要把整個應用的代碼用合理優雅的方法來實現,其實比單純的學會調用API理重要。

 

本人菜鳥一個,歡迎各位的批評指正。

若是有疑問,請直接留言或經過475500230@qq.com這個郵箱與我交流。

 

圖片資源大部分來自小米便籤,在此表示感謝。

我的練習做品,歡迎轉載!但請注意原做者與出處。

 

源碼下載:http://pan.baidu.com/share/link?shareid=1065236481&uk=1812042723

安裝包下載:http://pan.baidu.com/share/link?shareid=1152653812&uk=1812042723

相關文章
相關標籤/搜索