Launcher 图标加载
首先launcher的onCreate方法初始化:
// 加载桌面应用信息
LauncherAppState app = LauncherAppState.getInstance(this);
mOldConfig = new Configuration(getResources().getConfiguration());
mModel = app.getModel();
mRotationHelper = new RotationHelper(this);
InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
initDeviceProfile(idp);
idp.addOnChangeListener(this);
查看LauncherAppState的构造方法,在其中初始化了一个InvariantDeviceProfile类,调用自身的构造方法可以看到,
配置桌面的行,列,Hotseat(桌面底部固定的应用栏)的个数,Hotseat所有应用的位置,布局id,文件夹的行列,图标的大小等等信息。解析device_profiles.xml方法, 加载默认页的资源文件
故,当我们有新机型没有适配,就可以在这里修改或新增配置
private InvariantDeviceProfile(InvariantDeviceProfile p) {
numRows = p.numRows;
numColumns = p.numColumns;
numFolderRows = p.numFolderRows;
numFolderColumns = p.numFolderColumns;
iconSize = p.iconSize;
landscapeIconSize = p.landscapeIconSize;
iconBitmapSize = p.iconBitmapSize;
iconTextSize = p.iconTextSize;
landscapeIconTextSize = p.landscapeIconTextSize;
numShownHotseatIcons = p.numShownHotseatIcons;
numDatabaseHotseatIcons = p.numDatabaseHotseatIcons;
numAllAppsColumns = p.numAllAppsColumns;
numDatabaseAllAppsColumns = p.numDatabaseAllAppsColumns;
isScalable = p.isScalable;
devicePaddingId = p.devicePaddingId;
minCellHeight = p.minCellHeight;
minCellWidth = p.minCellWidth;
borderSpacing = p.borderSpacing;
dbFile = p.dbFile;
allAppsIconSize = p.allAppsIconSize;
allAppsIconTextSize = p.allAppsIconTextSize;
defaultLayoutId = p.defaultLayoutId;
demoModeLayoutId = p.demoModeLayoutId;
mExtraAttrs = p.mExtraAttrs;
devicePaddings = p