Android launcher 開發筆記(一) 從臉蛋開始

本文來自http://blog.csdn.net/chenshaoyang0011 轉載請申明文章出處!

Android系統的一大特色是它擁有的桌面通知系統,不同於IOS的桌面管理,Android有一個桌面系統用於管理和展示APP以及桌面Widget等。Android提供一個默認的桌面應

用,當然我們也可以使用第三方的桌面應用。Android的Launcher的源碼在  \packages\apps\Launcher2。Launcher2的主佈局文件包括res\layout-land\launcher.xml

 , res\layout-port\launcher.xml , res\layout-sw600dp\launcher.xml ,分別適配橫屏,豎屏和7寸平板。內容大同小異,這裏就以res\layout-port\launcher.xml的爲例。

首先讓我們看看launcher.xml中的結構:

  1. <com.android.launcher2.DragLayer  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"  
  4.     android:id="@+id/drag_layer"  
  5.     ...  
  6.     >  
  7.   
  8.     <!-- Keep these behind the workspace so that they are not visible when  
  9.          we go into AllApps -->  
  10.     <include  
  11.         android:id="@+id/dock_divider"  
  12.     layout="@layout/workspace_divider"  
  13.         ...  
  14.      />  
  15.   
  16.     <!-- 分頁指示器 -->  
  17.     <include  
  18.         android:id="@+id/paged_view_indicator"  
  19.         layout="@layout/scroll_indicator"  
  20.         ...  
  21.      />  
  22.   
  23.     <!-- The workspace contains 5 screens of cells -->  
  24.     <com.android.launcher2.Workspace  
  25.         android:id="@+id/workspace"  
  26.         ...  
  27.         >  
  28.   
  29.         <!-- 五個分屏,默認顯示cell3 -->  
  30.         <include android:id="@+id/cell1" layout="@layout/workspace_screen" />  
  31.         <include android:id="@+id/cell2" layout="@layout/workspace_screen" />  
  32.         <include android:id="@+id/cell3" layout="@layout/workspace_screen" />  
  33.         <include android:id="@+id/cell4" layout="@layout/workspace_screen" />  
  34.         <include android:id="@+id/cell5" layout="@layout/workspace_screen" />  
  35.     </com.android.launcher2.Workspace>  
  36.   
  37.     <!-- 搜索框/刪除框 -->  
  38.     <include  
  39.         android:id="@+id/qsb_bar"  
  40.         layout="@layout/qsb_bar" />  
  41.   
  42.     <!-- 顯示具體全部應用的界面,包括APPS、WIGHETS的tab標籤,以及顯示ALL APP的頁面和現實APP WIGHETS的頁面 -->  
  43.     <include layout="@layout/apps_customize_pane"  
  44.         android:id="@+id/apps_customize_pane"  
  45.         ..  
  46.     />  
  47.   
  48.     <!-- WorkSpace最下面的五個快捷位置 -->  
  49.     <include layout="@layout/hotseat"  
  50.         android:id="@+id/hotseat"  
  51.         ..  
  52.      />  
  53.   
  54.     <!-- 剛啓動的時候顯示的指導頁 -->  
  55.     <include layout="@layout/workspace_cling"  
  56.         android:id="@+id/workspace_cling"  
  57.         ...  
  58.     />  
  59.   
  60.     <!-- 是第一次進入全部應用之後顯示的指導頁 -->  
  61.     <include layout="@layout/folder_cling"  
  62.         android:id="@+id/folder_cling"  
  63.         ...  
  64.     />  
  65. </com.android.launcher2.DragLayer>  

接着我們來一一認識每一個View控件。

1、最外層的DragLayer,是一個繼承自FramLayout的View控件,顯示的就是整個桌面根容器。桌面的所有控件都是位於DragLayer中。

2、id/dock_divider,使用了佈局workspace_divider,其實就是一個ImageView。是Workspace與Hotseat之間的分割線。

workspace_divider顯示的效果

3、id/paged_view_indicator,使用了佈局scroll_indicator,顯示效果是在id/dock_divider上顯示一條淡藍色的橫線,來指示當分屏所處的位置

4、id/workspace ,工作空間擁有五個workspace_screen,即有五個分屏,每個分屏都可以放置shortcut和AppWidget,效果如下:

workspace顯示的效果

5、id/cell1..cell5 ,分別代表五個分屏

6、id/qsb_bar 搜索框/刪除框,根據需要進行切換

   刪除框     搜索框

7、id/apps_customize_pane,效果如下

apps_customize_pane

8、id/hotseat 即主屏幕下方的五個快捷位置

9、id/workspace_cling當第一次運行Launcher2時,會顯示的用於指導的動畫,以後不再顯示


10、id/folder_cling,第一次使用Folder時,展示給用戶的指導畫面。


這樣,我們已經可以使每個UI界面及組件都對號入座,這會使接下來分析的時候更加清晰。



Launcher3其實最主要的是一個Activity,基本上所有的操作都集中在這個Activity上,在Launcher.java 當中,setContentView的參數是R.layout.launcher,我們暫時只研究下桌面豎屏的情況,相關源碼在res/layout-port/launcher.xml。

請左手拿着你運行着launcher3的手機,右手打開launcher.xml,佈局的最外面是一個FrameLayout,緊緊地包圍了一個叫DragLayer的ViewGroup,他繼承自FrameLayout,主要功能就是處理拖拽事件,當你在拖拽一個圖標的時候,就是一個view放到了DragLayer裏面,跟隨你的手在移動。

下面在你的手機屏幕上左右滑,有好幾屏,這個能滑的東西叫做Workspace,在佈局文件裏面可以看到的,Workspace能算是Launcher3代碼裏代碼量前三的吧,他的父類的父類是PagedView,一個用來處理左右滑動的ViewGroup。那麼Workspace裏面可以滑動的單獨一屏叫什麼呢? 佈局文件裏面似乎沒有寫,其實是CellLayout,他負責的是圖標和小部件的顯示和整齊擺放。

接下來看你在滑動屏幕的時候看見下方有個指示器,告訴你桌面現在有幾屏,當前是在哪一屏上。這個東西叫做PageIndicator,從名字就可以看出意義了。還有最下面的4個固定不動的圖標,和中間一個Button顯示所有應用,這整個叫做Hotseat,用來放置比較常用的應用,比如撥號,短信,相機等等。

屏幕最上方有個搜索框,在我們拖動圖標的時候,這個搜索框會替換成“刪除”,整個這部分叫做SearchDropTargetBar。長按桌面空白區域的時候會進入一個界面,這裏可以對屏幕進行換序操作,下面有三個按鈕“壁紙”,“小部件”和“設置”,這個在佈局文件裏的id爲overview_panel。接下來還有幾個爲cling結尾的子佈局,這些是桌面第一次啓動時候的幫助界面,告訴你怎麼點擊怎麼用。

最後哈有兩個東西我暫時還沒有搞懂,ScrimView和DrawableStateProxyView,如果有人知道的話,留個言哈~

一圖勝千言:

桌面基本結構

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