时间:2020/08/31
之前公司不允许csdn,笔记写在其它地方。最近整理过来
InvariantDeviceProfile中读取device_profiles.xml文件
如果存在多个device_profiles.xml文件,需要根据mk文件查看当前用的是哪个目录的资源
launcher会根据不同的版本,引用不同路径的文件。
详情见
launcher数据加载
查看编译launcher的版本
两篇笔记
读取时机
at com.android.launcher3.InvariantDeviceProfile.initGrid(InvariantDeviceProfile.java:275)
at com.android.launcher3.InvariantDeviceProfile.<init>(InvariantDeviceProfile.java:147)
at com.android.launcher3.InvariantDeviceProfile.lambda$2ne4gU8MrKko0odxr9TWY6PNL2M(Unknown Source:2)
at com.android.launcher3.-$$Lambda$InvariantDeviceProfile$2ne4gU8MrKko0odxr9TWY6PNL2M.get(Unknown Source:0)
at com.android.launcher3.util.MainThreadInitializedObject.get(MainThreadInitializedObject.java:42)
at com.android.launcher3.LauncherAppState.<init>(LauncherAppState.java:79)
at com.android.launcher3.LauncherAppState.lambda$static$0(LauncherAppState.java:49)
at com.android.launcher3.-$$Lambda$LauncherAppState$9fk3Zfbmg-F33AGrA-xIGQu1tdc.get(Unknown Source:0)
at com.android.launcher3.util.MainThreadInitializedObject.get(MainThreadInitializedObject.java:42)
at com.android.launcher3.LauncherAppState.getInstance(LauncherAppState.java:59)
at com.android.launcher3.Launcher.onCreate(Launcher.java:310)
device_profiles.xml
里面的默认布局不一定会加载,其他的配置生效
xml里可能有多个配置,会全部读取,然后和手机的最小宽高Math.hypot(x1 - x0, y1 - y0)
(差的平方然后求和再开根号,2点之间距离公式),选最小值的配置,即和桌面最接近的配置。
<profiles xmlns:launcher="http://schemas.android.com/apk/res-auto" >
<grid-option
launcher:name="4_by_4"
launcher:numRows="4"
launcher:numColumns="4"
launcher:numFolderRows="4"
launcher:numFolderColumns="4"
launcher:numHotseatIcons="4"
launcher:defaultLayoutId="@xml/default_workspace_4x4" >
<display-option
launcher:name="Go Device"
launcher:minWidthDps="296"
launcher:minHeightDps="491.33"
launcher:iconImageSize="60"
launcher:iconTextSize="14.0"
launcher:canBeDefault="true" />
</grid-option>
<grid-option
launcher:name="5_by_5"
launcher:numRows="5"
launcher:numColumns="5"
launcher:numFolderRows="4"
launcher:numFolderColumns="4"
launcher:numHotseatIcons="5"
launcher:defaultLayoutId="@xml/default_workspace_5x5" >
<display-option
launcher:name="Large Phone"
launcher:minWidthDps="406"
launcher:minHeightDps="694"
launcher:iconImageSize="56"
launcher:iconTextSize="14.4"
launcher:canBeDefault="true" />
<display-option
launcher:name="Shorter Stubby"
launcher:minWidthDps="255"
launcher:minHeightDps="400"
launcher:iconImageSize="48"
launcher:iconTextSize="13.0"
launcher:canBeDefault="true" />
</grid-option>
</profiles>
尾注
具体情况要看项目配置,是否有覆盖,是否配置了某一个外部资源文件等等。