重庆网站建设 微客巴巴/seo招聘职责
Launcher3桌面的行数和列数是动态计算的,如何修改?
Launcher3桌面的行数和列数都是在InvariantDeviceProfile.java和DeviceProfile.java中动态计算的,xml中无法配置。
Note:L版本无InvariantDeviceProfile.java,是DynamicGrid.java,但是计算方法都是一样的。
InvariantDeviceProfile中用InvariantDeviceProfile来配置各种屏幕的手机桌面。如下:
public DynamicGrid(Context context, Resources resources,int minWidthPx, int minHeightPx,int widthPx, int heightPx,int awPx, int ahPx) {DisplayMetrics dm = resources.getDisplayMetrics();ArrayList<DeviceProfile> deviceProfiles =new ArrayList<DeviceProfile>();boolean hasAA = !LauncherAppState.isDisableAllApps();DEFAULT_ICON_SIZE_PX = pxFromDp(DEFAULT_ICON_SIZE_DP, dm);
// Our phone profiles include the bar sizes in each orientationdeviceProfiles.add(new DeviceProfile("Super Short Stubby",255, 300, 2, 3, 48, 13, (hasAA ? 3 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Shorter Stubby",255, 400, 3, 3, 48, 13, (hasAA ? 3 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Short Stubby",275, 420, 3, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Stubby",255, 450, 3, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Nexus S",296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));
/// M: add 294 X 460 profiledeviceProfiles.add(new DeviceProfile("294 X 460",294, 460, 4, 4, 50.34943f, 13, (hasAA ? 5 : 4), 49.566288f, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Nexus 4",335, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Nexus 5",359, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56, R.xml.default_workspace_4x4));deviceProfiles.add(new DeviceProfile("Large Phone",406, 694, 5, 5, 64, 14.4f, 5, 56, R.xml.default_workspace_5x5));
// The tablet profile is odd in that the landscape orientation// also includes the nav bar on the sidedeviceProfiles.add(new DeviceProfile("Nexus 7",575, 904, 5, 6, 72, 14.4f, 7, 60, R.xml.default_workspace_5x6));// Larger tablet profiles always have system bars on the top & bottomdeviceProfiles.add(new DeviceProfile("Nexus 10",727, 1207, 5, 6, 76, 14.4f, 7, 64, R.xml.default_workspace_5x6));deviceProfiles.add(new DeviceProfile("20-inch Tablet",1527, 2527, 7, 7, 100, 20, 7, 72, R.xml.default_workspace_4x4));
mMinWidth = dpiFromPx(minWidthPx, dm);mMinHeight = dpiFromPx(minHeightPx, dm);mProfile = new DeviceProfile(context, deviceProfiles,mMinWidth, mMinHeight,widthPx, heightPx,awPx, ahPx,resources);}
InvariantDeviceProfile的各个参数依次代表:配置名字(任意定义)、最小宽度(单位是dp)、最小高度(单位是dp)、桌面行数、桌面列数、文件夹行数、文件夹列数、主菜单中predicted apps最小列数、桌面Icon的size(单位是dp)、桌面Icon的文字size(单位是dp)、Hotseat的Icon个数、Hotseat的Icon的size(单位是dp)、默认的桌面配置LayoutId。
如何由手机分辨率计算最小宽度、最小高度?
例如:手机分辨率为720*1280,DPI=320。
竖屏时:X*Y=720*1230(1230=屏幕高度-状态栏高度-NavigationBar高度)
横屏时:Y*X=646*1280(646=屏幕宽度-状态栏高度-NavigationBar高度)
最小宽度为:323=Min(720,646)/(320/160)
最小高度为:615=Min(1230,1280)/(320/160)