Launcher3_布局

1、尺寸和位置

Launcher.java的onCreate中会初始化DeviceProfile

DeviceProfile类中,

构造方法中,初始化了很多桌面布局相关的数据,

比如:屏幕宽高、可见宽高、搜索框的宽高、页面指示器的高度、workspace的边距、桌面图标行列数、图标大小、cell格子的宽高、文件夹图标的大小、文件夹格子的宽高、主菜单行列数等等。

layout方法:初始化了桌面每个组成部分的位置,

比如:搜索栏、workspace、底边栏、页面指示器。

到这一步,搜索栏、workspace、底边栏、页面指示器大小和位置已经确定好。

2、workspace布局

launchermodel中,bindWorkspace会绑定页面bindWorkspaceScreens、绑定图标bindWorkspaceItems

bindWorkspaceScreens

绑定页面bindWorkspaceScreens会回调到launcher的bindScreens,最终掉到workspace中的insertNewWorkspaceScreen,向workspace中添加celllayout

bindWorkspaceItems

绑定图标bindWorkspaceItems会回调到launcher的bindItems,然后new一个BubbleTextView添加到workspace中(workspace.addInScreenFromBind),然后把图标添加到cell中(layout.addViewToCellLayout),最后图标的view被添加到ShortcutsAndWidgets中(mShortcutsAndWidgets.addView)。
由此看出,桌面的层叠关系。具体布局就要研究一下workspace、celllayout、shortcutAndWidgets三个类的onLayout和onMeasure方法。

celllayout布局

celllayout的onMeasure方法中,主要计算了mCellWidth、mCellHeight 、mWidthGap、mHeightGap并 传递给了mShortcutsAndWidgets,并设置了自己的尺寸。
celllayout的onLayout方法中,设置了child.layout

ShortcutsAndWidgets布局

ShortcutsAndWidgets的onMeasure方法中,设置了自己的尺寸、child的尺寸(measureChild)。measureChild中计算了child显示的位置(lp.setup)。
ShortcutsAndWidgets的onLayout方法中,设置了child.layout,也就是每一个图标的位置
至此,桌面所有图标位置计算完成。

3、主菜单/小部件界面布局

launcherModel中,loadAllApps方法加载完所有应用,会调用到launcher的bindAllApplications。在调用AppsCustomizeContent.setApps,该方法中对applist进行排序,并调用updatePageCountsAndInvalidateData更新页面数和布局。最后调用到AppsCustomizeContent的syncPageItems绑定每一个图标。
关于其他细节的布局和workspace类似。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值