上一篇我們講述了Launcher桌面的基本結(jié)構(gòu)窖贤,接下來這一片我們來講解一下Launcher的基礎(chǔ)知識砖顷,包括他的一些類的用處和一些布局的介紹。
Launcher3源碼涉及到的android基礎(chǔ)知識
如果想學習Launcher就必須熟練掌握這些android基本知識赃梧,權(quán)重比例在圖中都標明了滤蝠。不會的可以先學習一下這些知識。
基礎(chǔ)知識
這里我們先介紹一下Launcher里面常用類的主要功能
- Launcher:繼承Activity授嘀,主界面物咳,用來顯示圖標,widget和文件夾等蹄皱,它的布局就是桌面的基本結(jié)構(gòu)览闰,布局內(nèi)部為DragLayer。
- LauncherModel:繼承BroadcastReceiver巷折,是一個廣播接收器压鉴,用來接收廣播,主要作用是加載數(shù)據(jù)锻拘,處理數(shù)據(jù)油吭,保存桌面狀態(tài),內(nèi)部類LoaderTask用來初始化桌面。
- LauncherProvider:繼承ContentProvider上鞠,主要處理數(shù)據(jù)庫的操作际邻。
- LauncherAppState:單例模式的全局管理類,主要初始化一些對象注冊廣播芍阎,獲取硬件設(shè)備信息世曾。
- compat:兼容包,帶這個后綴的都是做兼容處理的類谴咸,比如(LauncherAppsCompat 【App列表的兼容類】AppweightManagerCompat【Appweight的兼容類】)轮听。
- InvariantDeviceProfile:一些不變的設(shè)備相關(guān)參數(shù)管理類,內(nèi)部包含了橫豎屏模式的DeviceProfile岭佳。
- WidgetPreviewLoader:存儲Widget信息的數(shù)據(jù)庫血巍,內(nèi)部創(chuàng)建了數(shù)據(jù)庫widgetpreviewsdb。
- LauncherStateTransitionAnimation:各類動畫總管處理類珊随,負責各種情況下的各種動畫的效果處理述寡。
- IconCache:圖標緩存類,應(yīng)用程序icon和title的緩存叶洞,內(nèi)部類創(chuàng)建了數(shù)據(jù)庫app_icons.db鲫凶。
- LauncherAppWidgetHost:AppWidgetHost子類,是桌面插件宿主衩辟,為了方便拖拽等才繼承處理螟炫。
- LauncherAppWidgetHostView:AppWidgetHostView子類,配合LauncherAppWidgetHost得到HostView艺晴。
- LauncherRootView:豎屏模式下根布局昼钻,繼承了InsettavleFrameLayout,控制是否顯示在狀態(tài)欄下面封寞。
- DragLayer:一個用來負責分發(fā)事件的viewGroup然评。
- DragController:DragLayer只是一個ViewGroup,具體的拖拽的處理都放到了DragController中狈究。
- BubbleTextView:圖標都基于他沾瓦,繼承自TextView。
- DragView:拖拽圖標時跟隨手指移動的view谦炒。
- Folder:打開文件夾展示的view贯莺。
- FolderIcon:文件夾圖標。
- DragSource宁改、DrogTarget:拖拽接口缕探,DragSource表示圖標從哪里開始拖拽,DrogTarget表示圖標被拖到了哪里还蹲。
- ItemInfo:桌面上每個Item的信息數(shù)據(jù)結(jié)構(gòu)爹耗,包括在第幾屏第幾行耙考,第幾列,寬高等信息潭兽,該對象與數(shù)據(jù)庫中記錄一一對應(yīng)倦始,該類有多個子類如:FolderIcon的FolderInfo,BubbleTextView的shorcutInfo山卦。
默認圖標配置
default_workspace.xml
我們知道當我們在啟動Launcher的時候桌面會有一些已經(jīng)配置好的圖標鞋邑,其實在第一次運行Launcher的時候會讀取一個配置xml文件來進行布局(launcher/res/xml/default_workspace.xml)這個文件可以配置App的快捷方式,weight账蓉,search搜索欄等枚碗。(具體的內(nèi)容可以去源碼中查看,這里只貼出來一部分)
文件中的一些屬性:
<appwidget
launcher:packageName="com.google.android.googlequicksearchbox"
launcher:className="com.google.android.googlequicksearchbox.SearchWidgetProvider"
launcher:screen="0"
launcher:x="0"
launcher:y="0"
launcher:spanX="4"
launcher:spanY="1" />
<favorite
launcher:packageName="com.android.vending"
launcher:className="com.android.vending.AssetBrowserActivity"
launcher:screen="0"
launcher:x="-1"
launcher:y="-1" />
<favorite>:程序快捷鍵屬性標簽铸本。
<appwidget>:插件
其屬性有:
launcher:className:應(yīng)用的類名肮雨。
launcher:packageName:該應(yīng)用的包名。
launcher:screen:當前屏幕位置箱玷,0-4屏怨规,共5屏。
launcher:x:圖標X位置锡足,左上角第一個為0波丰,向右遞增0-4共5個。
launcher:y:圖標Y位置舱污,左上角第一個為0呀舔,向下遞增弥虐,0-2共3個扩灯。
launcher:spanX:在X方向上所占格數(shù)。
launcher:spanY:在Y方向上所占格數(shù)霜瘪。
default_workspace_4*4.xml
接下來我們可以看到有一些這樣的文件:
default_workspace_3 * 3.xml
default_workspace_4 * 4.xml
default_workspace_5 * 5.xml
default_workspace_5 * 6.xml
這些事我們默認的布局文件3 * 3,4 * 4,5 * 5,5 * 6表示桌面圖標的列數(shù)和行數(shù)珠插,可以根據(jù)屏幕的大小來進行適配選擇用那一個布局,(具體適配文件是launcher/res/xml/device_profiles.xml)具體操作后面的文章會詳細解釋颖对。
友情鏈接:Launcher3屏幕適配
基礎(chǔ)知識就講到這里捻撑,接下來的文章將正式進入Launcher源碼的分析。