一、前言:
最近在研究有关Android桌面和主菜单数据加载与UI绑定,索性就写几篇文章来总结一下,先说一下我采用的是Launcher3的源码进行研究的,相对于Launcher2多了一些特性与优化吧。比如添加了RecycleView作为点击更多应用的图标列表布局。
二、布局基础
(一)先说一下桌面布局基础吧,一张图给你全新认识。
- 浅红色部分为桌面区域,叫Workspace,继承于PagedView,可以进行滑动。
- 黑色部分就是Workspace加载的布局CellLayout,里面加载的是很多应用与文件夹图标,请注意,其实Workspace不是紫色部分中点击中间加载更多APP的跳转界面。
- 灰色部分为PageIndicator,指示当前Screen位置。
- 紫色部分为HotSeat,放置常用的应用,中间那个应用图标是跳转展示所有App应用列表界面,其实HotSeat,也是一个CellLayout。
- 深红色部分为应用快捷方式,其实是一个BubbleTextView,数据相关beans是ShortcutInfo。
- 绿色部分为小部件(比如天气预报,时间这一类),与布局类带有AppWidget息息相关。
- 黄色部分为SearchDropTargetBar(搜索栏),拖动的时候搜索栏会
变成删除的区域。
(二)主桌面与加载更多桌面区分一下
虽然在很多品牌的桌面已经没有了加载更多应用这个图标了,但是点击这个加载全部图标的界面并不与上面的布局一致的这个要区分。这个涉及的布局类为allapps包下的AllAppsContainerView。
三、认识常用的类
- Lanucher,继承Activity,UI的初始化与展现,可以查看方法bindAllApps(加载所有的应用),bindItems(加载桌面应用,注意与前面的bindAllApps区分),bindAppWidget(加载小部件),bindFolders(加载文件夹)追踪一下过程。
- LauncherModel,数据操作相关,保存桌面运行时状态信息,数据库的读写操作,其中LoadderTash负责数据的读取,图标,小部件的加载,注意查看loadWorkspace可以追踪数据默认来源可以选择第一次默认加载xml。
- LauncherProvider,数据来源,数据库的创建等操作。
- LauncherAppState,初始化各种对象,注册各种广播与观察者。
- ItenInfo,桌面上每个应用信息,比如图标在第几屏,第几行第几列,高宽等。带有Info绝大部分都是继承于它,FolderInfo(文件夹图标),ShortcutInfo(应用图标)
- BubbleTextView,图标基础,相关UI操作可在上面进行修改定制。
- AppWidgetHostView,小部件相关类,信息存储相关Bean: LauncherAppWidgetInfo。
- IconCache,应用图标与标题缓存类。
- Utilities,我注意的是它的CreateIconBitmap,可以替换图标以及绘制背景。
- DeviceProfile,请留意这个类,很多默认工作区域加载的参数都在这里,比如CellLayout的行数列数,图标的尺寸,以及默认加载的default_workspace_layout.xml都在这里。
这些都是实践的效果,做个小应用来总结一下吧。