Android系列之二十四 -- home screen

來源:互聯網
上載者:User

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,牆紙。

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

類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。


類簡介: 
AddAdapter:添加案頭元素的適配器。
AllAppsGridView:Icon列表的的主介面,繼承gridView。
DeleteZone:luancher的刪除地區,繼承ImageView。
DragController:拖動控制介面。
DragLayer:整個launcher的父節點,繼承FrameLayout,實現介面DrayController。
DragSource:拖動源介面,定義了void onDropCompleted(View target, boolean success)。
DropTarget:拖動目標,定義很多拖動過程需要的方法:onDrop,onDragEnter,onDragOver,onDragExit,acceptDrop。
HandleView:launcher抽屜的開關,不過在android2.2已經沒用抽屜了。
Launcher:整個launcher的程式的入口,代碼量最大的一個檔案。
Workspace:整個介面layout,幾個視窗就是他下面的子節點。

Launcher中實現了MVC模式(M:launchermode , V:draglayer ,C: launcher),以此為主線,可以得到 Launcher對各個組件管理的細節(如drag的實現)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.