如何客制化Launcher的主菜单图标

    xiaoxiao2021-09-07  127

    在Launcher上,为了保持手机UI风格的统一,希望把用户自己安装的第三方apk图标

    或者系统预置的应用图标用特定的图标来显示,如何修改?

    1.请修改AppInfo.java的构造函数

    publicAppInfo(Context context, LauncherActivityInfoCompat info, UserHandleCompat user,IconCache iconCache) { this.componentName = info.getComponentName(); this.container = ItemInfo.NO_ID; flags = initFlags(info); firstInstallTime = info.getFirstInstallTime(); iconCache.getTitleAndIcon(this, info, true /* useLowResIcon */); //xxx add if ( (info.getApplicationInfo().flags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) != 0) { this.iconBitmap=Bitmap.createBitmap(72, 72, Bitmap.Config.ARGB_8888); // 具体方法可以自行决定 } //xxx add intent = makeLaunchIntent(context, info, user); this.user = user; }

    2.用户安装的第三方app

    ...... AppInfo applicationInfo = findApplicationInfoLocked(info.getComponentName().getPackageName(), user,info.getComponentName().getClassName()); if (applicationInfo == null) { add(new AppInfo(context, info, user, mIconCache)); } else { mIconCache.getTitleAndIcon(applicationInfo, info, true /* useLowResIcon */); //xxx add 在此处添加修改applicationInfo.iconBitmap的代码(同上) //xxx add modified.add(applicationInfo); } ......

    3.系统预置的某个应用

    请修改IconCache.java文件的cacheLocked方法,将 entry.icon = Utilities.createIconBitmap(info.getBadgedIcon(mIconDpi), mContext); 修改为客制化的图标 举例如下:

    if("com.android.contacts".equals(componentName.getPackageName())) { Drawable drawable= getFullResIcon(mContext.getResources(), R.drawable.ic_hw_allbackup); entry.icon = Utilities.createIconBitmap(drawable, mContext); } else { entry.icon = Utilities.createIconBitmap(info.getBadgedIcon(mIconDpi), mContext); }

    转载请注明原文地址: https://ju.6miu.com/read-677483.html

    最新回复(0)