1.如何设置默认页
1 2 3 4 5 | res/values/Config.xml <integer name= "config_workspaceDefaultScreen" > 0 </integer> 在Launcher3 桌面,不管在哪一页,按HOME 键,会回到默认页。 |
2.如何隐藏launcher3中的搜索框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 1 . 在Launcher3/src/com/android/launcher3/Launcher.java中 注释updateGlobalIcons()方法调用,共两处。 public View getQsbBar() { if (mQsbBar == null ) { mQsbBar = mInflater.inflate(R.layout.search_bar, mSearchDropTargetBar, false ); - mSearchDropTargetBar.addView(mQsbBar); } + mQsbBar.setVisibility(View.GONE); return mQsbBar; } @Override public void bindSearchablesChanged() { //注释该方法内容 /* boolean searchVisible = updateGlobalSearchIcon(); boolean voiceVisible = updateVoiceSearchIcon(searchVisible); if (mSearchDropTargetBar != null) { mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible); } */ } 2 . 在Launcher3/src/com/android/launcher3/DynamicGrid.java中 // Layout the search bar //注释如下内容 /* View qsbBar = launcher.getQsbBar(); LayoutParams vglp = qsbBar.getLayoutParams(); vglp.width = LayoutParams.MATCH_PARENT; vglp.height = LayoutParams.MATCH_PARENT; qsbBar.setLayoutParams(vglp); */ 3 . 在Launcher3/res/values/dimens.xml中 - <dimen name= "dynamic_grid_search_bar_height" >48dp</dimen> + <dimen name= "dynamic_grid_search_bar_height" >18dp</dimen> 重新编译后即可看到效果。 |
3.如何调整原生Launcher3主界面的search框的大小?
1 2 3 4 5 6 | 修改如下: 定位打/packages/apps/Launcher3/res/values/dimens.xml。 <dimen name= "dynamic_grid_edge_margin" >3dp</dimen> //修改这个可以调整search框距离顶部距离。 <dimen name= "dynamic_grid_search_bar_max_width" >500dp</dimen> //search框的宽度,一般不需要调整。 <dimen name= "dynamic_grid_search_bar_height" >48dp</dimen> //search框的高度,不要调整为0,删除按钮需要占用一部分空间。 |
4.让主菜单部分应用按指定顺序排在前面?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 添加res/values/arrays.xml:需要排序的应用:这里的item 内容一定要填写正确,否则会匹配不上,无法参与排序。 <!--?xml version= "1.0" encoding= "utf-8" ?--> <resources> <string-array name= "apps_componentName" translatable= "false" > <item>ComponentInfo{com.android.vending/com.android.vending.AssetBrowserActivity}</item> <item>ComponentInfo{com.android.browser/com.android.browser.BrowserActivity}</item> <item>ComponentInfo{com.android.settings/com.android.settings.Settings}</item> <item>ComponentInfo{com.android.camera2/com.android.camera.CameraLauncher}</item> <item>ComponentInfo{com.android.mms/com.android.mms.ui.ConversationList}</item> </string-array> </resources> src/com/android/launcher3/Utilities.java + import java.util.Arrays; + import java.util.List; + public static List<string> getAppsComponentName( final Context context) { + return Arrays.asList(context.getResources().getStringArray(R.array.apps_componentName)); + } src/com/android/launcher3/LauncherModel.java protected int mPreviousConfigMcc; + static List<string> appArray = new ArrayList<string>(); LauncherModel(LauncherAppState app, IconCache iconCache, AppFilter appFilter) { ...... mUserManager = UserManagerCompat.getInstance(context); + appArray = Utilities.getAppsComponentName(context); } 添加如下sortApps 方法:apps 按arrays.xml 排序,在原来的排序基础上,将arrays.xml 配置的应用按顺序排在前面。 public static final void sortApps(ArrayList apps) { int length = appArray.size(); List assignApps = new ArrayList(); for ( int i= 0 ;i<length;i++) := "" app= "" appinfo= "" for = "" i= "" if = "" int = "" k= "0;" > - 1 ;i--) { AppInfo app = assignApps.get(i); if (app != null ){ apps.remove(app); apps.add( 0 , app); } } Log.d(TAG , "The Apps List after Sort!" ); } src/com/android/launcher3/AppsCustomizePagedView.java public void setApps(ArrayList list) { if (!LauncherAppState.isDisableAllApps()) { ...... SprdAppSortAddonStub.getInstance().sortApps(mApps); + LauncherModel.sortApps(mApps); //在原来排序的基础上,再将arrays.xml中配置的应用按顺序排在前面。 updatePageCountsAndInvalidateData(); } } private void addAppsWithoutInvalidate(ArrayList list) { ...... // SPRD: bug375932 2014-12-02 Feature customize app icon sort. SprdAppSortAddonStub.getInstance().sortApps(mApps); + LauncherModel.sortApps(mApps); //在原来排序的基础上,再将arrays.xml中配置的应用按顺序排在前面。 }
|
5.如何确定待机HOME界面布局使用的是哪个default_workspace文件?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | src/com/android/launcher3/DynamicGrid.java 选择哪个default_workspace 和 public DynamicGrid(Context context, Resources resources, int minWidthPx, int minHeightPx, int widthPx, int heightPx, int awPx, int ahPx)中的minWidthPx 和minHeightPx minWidthPx 、minHeightPx 值转换为dpi之后 ,deviceProfiles 列表与其进行比较,选择与当前屏幕大小最接近的deviceProfiles 的 详细解释如下: src/com/android/launcher3/DynamicGrid.java中 1 .deviceProfiles 列表如下: deviceProfiles.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)); 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 side deviceProfiles.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 & bottom deviceProfiles.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)); 2 .重新计算MinWidth 和MinHeigh 单位是dpi。 mMinWidth = dpiFromPx(minWidthPx, dm); mMinHeight = dpiFromPx(minHeightPx, dm); 3 .创建mProfile,mProfile.defaultLayoutId 就是最终Home界面使用的default_workspace 的id。 mProfile中的defaultLayoutId 是哪个default_workspace 见DeviceProfile.java。 mProfile = new DeviceProfile(context, deviceProfiles, mMinWidth, mMinHeight, widthPx, heightPx, awPx, ahPx, resources); src/com/android/launcher3/DeviceProfile.java DeviceProfile(Context context, ArrayList<deviceprofile> profiles, float minWidth, float minHeight, int wPx, int hPx, int awPx, int ahPx, Resources res) { 方法中: 4 .用屏幕宽高创建的点(PointF xy = new PointF(width, height))与 deviceProfiles中的w 和 h 创建的点 new PointF(widthDps, heightDps))进行比较,也就是从deviceProfiles 列表中找出和当前屏幕大小最接近的deviceProfiles。 DeviceProfile closestProfile = findClosestDeviceProfile(minWidth, minHeight, points); ...... 5 .采用和当前屏幕大小最接近的deviceProfiles的default_workspace defaultLayoutId = closestProfile.defaultLayoutId;
|
6.如何替换第三方应用在launcher上显示的图标?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 在launcher/src/com/android/launcher3/IconCache.java中修改, private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info, private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info, HashMap<object, charsequence= "" > labelCache) { CacheEntry entry = mCache.get(componentName); if (entry == null ) { entry = new CacheEntry(); mCache.put(componentName, entry); ComponentName key = LauncherModel.getComponentNameFromResolveInfo(info); if (labelCache != null && labelCache.containsKey(key)) { entry.title = labelCache.get(key).toString(); } else { entry.title = info.loadLabel(mPackageManager).toString(); if (labelCache != null ) { labelCache.put(key, entry.title); } } if (entry.title == null ) { entry.title = info.activityInfo.name; } Drawable icon; int index = sysIndexOf(componentName.getClassName()); Log.i( "jxt" , "index:" +index+ ",Name:" +componentName.getClassName()); icon = getFullResIcon(info); if (index >= 0 ) { entry.icon = Utilities.createIconBitmap(icon, mContext); } else { entry.icon = Utilities.createIconBitmap( /* SPRD: Feature 253522, Remove the application drawer view @{ */ // getFullResIcon(info), mContext); icon, mContext, true ); } /* 此处即为替换图标代码 {@*/ if ( "第三方应用的componentName" .equals(componentName.toString())){ entry.icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.xxx); } /* @} */ } return entry; }
|
7.如何去掉Launcher3的开机引导页面?
1 2 3 4 5 6 7 8 | 修改方案如下: 请定位到src/com/android/launcher3/LauncherClings.java文件: class LauncherClings implements OnClickListener { ...... private static final String TAG_CROP_TOP_AND_SIDES = "crop_bg_top_and_sides - private static final boolean DISABLE_CLINGS = false ; + private static final boolean DISABLE_CLINGS = true ; |
8.为何Launcher3设置一些壁纸后,壁纸显示比预览图模糊?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 预览的时候,没有做格式转化,所以显示正常! 在设置壁纸的时候,默认是采用jpeg格式转换的,导致转换后损耗了一些,设置壁纸后,某些对比度比较高的壁纸就显示的模糊! 修改方案: 默认修改为采用png格式转换! android6. 0 之前的版本,请做如下修改: 定位到/packages/apps/Launcher3/的WallpaperCropActivity.java文件 1 、String mOutputFormat = "jpg" ; //修改为"png" 2 、 protected static String getFileExtension(String requestFormat) { String outputFormat = (requestFormat == null ) ? "jpg" //修改为"png" : requestFormat; outputFormat = outputFormat.toLowerCase(); return (outputFormat.equals( "png" ) || outputFormat.equals( "gif" )) ? "png" // We don't support gif compression. : "jpg" ; } android6. 0 的版本,请做如下修改: 定位到/packages/apps/Launcher3/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java文件 if (crop.compress(CompressFormat.JPEG, DEFAULT_COMPRESS_QUALITY, tmpOut)) 修改为: if (crop.compress(CompressFormat.PNG, DEFAULT_COMPRESS_QUALITY, tmpOut)) |
9.6.0平台上Launcher3自带的壁纸路径是什么?
1 2 3 4 5 6 | 在 6.0 中,平台版本预置了一些壁纸资源,相关路径如下: 资源文件在: packages/apps/Launcher3/WallpaperPicker/res/drawable-xhdpi/ 字串文件在: packages/apps/Launcher3/WallpaperPicker/res/values-nodpi/wallpapers.xml |