android Launcher study 之一

本博文主要參考網絡資料,希望對各位正在修改launcher的有幫助: 
Home screen可以說是一個手機的最重要應用,就像一個門戶網站的首頁,直接決定了用戶的第一印象。下面對home screen做一簡要分析。 

home screen的代碼位於packages/apps/Launcher目錄。從文件launcher.xml,workspace_screen.xml可獲知home screen的UI結構如下圖所示: 

 

整個homescreen是一個包含三個child view的FrameLayout(com.android.launcher.DragLayer)。 

第一個child就是桌面com.android.launcher.Workspace。這個桌面又包含三個child。每個child就對應一個桌面。這就是你在Android上看到的三個桌面。每個桌面上可以放置下列對象:應用快捷方式,appwidget和folder。 

第二個child是一個SlidingDrawer控件,這個控件由兩個子控件組成。一個是com.android.launcher.HandleView,就是Android桌面下方的把手,當點擊這個把手時,另一個子控件,com.android.launcher.AllAppsGridView就會彈出,這個子控件列出系統中當前安裝的所有類型爲category.launcher的Activity。 

第三個child是com.android.launcher.DeleteZone。當用戶在桌面上長按一個widget時,把手位置就會出現一個垃圾桶形狀的控件,就是這個控件。 

在虛擬桌面上可以擺放四種類型的對象: 
1. ITEM_SHORTCUT,應用快捷方式 
2. ITEM_APPWIDGET,app widget 
3. ITEM_LIVE_FOLDER,文件夾 
4. ITEM_WALLPAPER,牆紙。 

類AddAdapter(AddAdapter.java)列出了這四個類型對象。當用戶在桌面空白處長按時,下列函數序列被執行: 
Launcher::onLongClick --> 
Launcher::showAddDialog --> 
Launcher::showDialog(DIALOG_CREATE_SHORTCUT); --> 
Launcher::onCreateDialog --> 
Launcher::CreateShortcut::createDialog:這個函數創建一個彈出式對話框,詢問用戶是要添加什麼(快捷方式,appwidget, 文件夾和牆紙)其內容就來自AddAdapter。 

類Favorites(LauncherSettings.java)和類LauncherProvider定義了一個content provider,用來存儲桌面上可以放置的幾個對象,包括shortcut, search和clock等。 

類DesktopItemsLoader負責將桌面上所有的對象從content provider中提取。 

線程private ApplicationsLoader mApplicationsLoader負責從包管理器中獲取系統中安裝的應用列表。(之後顯示在AllAppsGridView上)。ApplicationsLoader::run實現: 
1)通過包管理器列出系統中所有類型爲Launcher,action爲MAIN的activity; 
2)對每一個Activity, 
      a) 將Activity相關元數據信息,如title, icon, intent等緩存到appInfoCache; 
      b) 填充到ApplicationsAdapter 中。填充過程中用到了一些小技巧,每填充4(UI_NOTIFICATION_RATE)個activity更新一下相應view。 

在Launcher::onCreate中,函數startLoaders被調用。而該函數接着調用loadApplications和loadUserItems,分別獲取系統的應用列表,以及顯示在桌面上的對象列表(快捷方式,appwidget,folder等)。 

Launcher上排列的所有應用圖標由AllAppsGridView對象呈現。這個對象是一個GridView。其對應的Adapter是ApplicationsAdapter,對應的model則是ApplicationInfo數組。數組內容是由ApplicationsLoader裝載的。 
private class ApplicationsLoader implements Runnable。 

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