Android laucher總結(轉)

在android上做了一個月左右的launcher方面的項目,伴隨着R3的發出,基本進入維護階段,由於大部分時間我都是在android提供 的源碼Launcher中做修改,所以對它的整體基本有了概念,現在開始做一些細節上的總結,按照國際慣例和從整體到局部的原則,我還是先對 Launcher做一個整體上的描述:

從manifestl開始看起,先是一些權限方面的設置(補充加上:<uses-sdk android:minSdkVersion="7" />),而後即是一個application(補充加上:android:debuggable="true"),接着是兩個activity,一 個就是我們的主程序Launcher了,另一個從名字上看也很清晰WallpaperChooser(用於查找列出所有帶有特定標記名稱的圖片,並將他們 的返回值作爲背景圖 ---> 我對這裏進行了修改,通過startActivityForResult函數來讓他們返回resId,以此作爲All Progaram Page的背景)。

再往下是兩個Receiver用於安裝和卸載shortcut,這裏從名字上看我們不太清楚這裏的shortcut到底指什麼,經過我的嘗試,這裏 的shortcut主要並不是指那些application的icon,而是如:打開瀏覽器,創建一個網頁的快捷方式到桌面。這裏的快捷方式的創建和卸載 便是由這兩個receiver來控制,從他們對應的Java文件可以看出功能。要注意的是,當manifest中做了receiver的配置時,那麼程序 啓動時,receiver就已經伴隨運行了。

最後一部分是一個provider,熟悉android的朋友都知道這是用於管理數據庫,而在Launcher中,有專門的一個類 LauncherProvider用於提供對數據庫的具體操作,而數據庫的創建和獲取還是要由SQLiteOpenHelper來完成,這一部分我會在後 面慢慢加入。好,現在對manifest的部分已經基本總結完畢,接着來看main.xml(launcher.xml):

它的層次關係非常易讀:DragLayer ---> WorkSpace ---> CellLayout

                                              ---> DeleteZone

                                              ---> MenuBar

                                              ---> ProgramPage

DragLayer對所有位於其中的DragTarget的移動、繪製進行攔截處理(主要是針對屏幕上的Widget、Shortcut、Folder,因爲我這裏是不存在Shortcut和Folder的,所以只針對Widget)。

WorkSpace則是一個很關鍵的類,主要是處理屏幕的切換中相關操作(如壁紙的移動,計算移動距離等)、爲當前屏幕添加Widget的處理、長 按當前屏幕的處理(這裏的setLongclick關係到Launcher和FIHLauncherAppWidgetHost等類)和在當前屏幕上查找 空白格子用於添加Widget,它包含了5個CellLayout分別代表5個屏幕,CellLayout中定義了橫豎軸各有多少個空格,並用數組保存了 所有的空白格子,當佔用一個後就將之對應的Occupied數組位置爲true。當然CellLayout中還有許多其他的操作,這裏我們先大概說明一下 就好。

MenuBar這個就很簡單了,由於項目需要,我在屏幕下方添加了MenuBar主要用於添加Shortcut,那麼它的操作當然主要就是處理圖標的添加和移動,保存和刪除。

ProgramPage用於顯示所有程序並可以進行分類保存,同樣移動、添加、切換、保存、刪除。這個ViewGroup其實是包括兩部分,一個是ProgramCatagoryList,一個是AllProgramPage。

一個Catagory對應一個AllProagramPage。

這裏我已經對manifest和main.xml(launcher.xml)分析完畢,後面的內容則開始對細節上的問題做詳細的闡述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章