Launcher2 自定义应用快捷方式图标

依然是Launcher2的代码,这回是要将Launcher2中显示应用的图标进行自定义图标。

这个修改的想法产生自现在遇到的一个问题,就是对于一个自定义的Launcher来说,界面的图标风格和图标样式的统一是很重要的,所以就会经常的对于launcher中的应用程序图标进行修改,但是修改一两个应用的APK图标相对来说还算简单,但是对于大批量的修改的话就有点力所不及并且版本相当难管理。所以就想到,既然知道了launcher的加载和提取应用程序中icon_launcher的方法,那应该也是可以李代桃僵的将之半途中替换了来显示我们的自定义图标。于是就有了下面的修改了。

首先是将自定义的APK的launcher图标资源拷贝到launcher的资源文件下,之后开始进入代码部分,直接跳过图标提取部分代码的解析过程,看IconCache.java了

    //是否为自定义图标的flag hzhang
    private static boolean isMyIcon = false;
.........................................................
    public Drawable getFullResIcon(ActivityInfo info) {

        Resources resources;
        try {
            resources = mPackageManager.getResourcesForApplication(
                    info.applicationInfo);
        } catch (PackageManager.NameNotFoundException e) {
            resources = null;
        }
        if (resources != null) {
            int iconId = setAppIcon(info.packageName);//info.getIconResource();
            if(iconId==0){
            	iconId = info.getIconResource();
            	isMyIcon = false;
            }else {
            	isMyIcon = true;
            }
            if (iconId != 0 && !isMyIcon) {
                return getFullResIcon(resources, iconId);
            }else{
            	resources = mContext.getResources();
            	return getFullResIcon(resources, iconId);
            }
        }
        return getFullResDefaultActivityIcon();
    }

上述代码分别是一个标志位的定义,这个标志位的作用是区分是否为我的修改目标应用,如果是我需要修改为自定义图标的应用则会置为真,否则反之。

同时也要说明下上述修改的意义,源码中的做法是会在每个指定的应用APK资源文件中去提取指定的图标资源作为即将显示的目标图片,而如果是我需要自定义的则我会指定其资源Resource路径为当前Launcher的Resource资源,并从中去找我指定的图片作为图标来代替。其中的setAppIcon则是进行判断是具体需要提取的图标为哪个应用的,是通过PackageName来判断的,并相应返回我在Launcher资源中指定的图片ID,并指定到iconId。

下面是setAppIcon函数代码

	private static int setAppIcon(String packagename){
		int iconid  = 0;
		if(packagename.equalsIgnoreCase("com.my.xxx")){ //此处为应用包名,具体可根据自己需求进行判断
			iconid =  R.drawable.app_icon_xxx;      //此处为图片资源
		}else if(packagename.equalsIgnoreCase("com.my.xxx")){
			iconid = R.drawable.app_icon_xxx;
		}else if(packagename.equalsIgnoreCase("com.my.xxx")){
			iconid = 0;
		}else if(packagename.equalsIgnoreCase("com.my.xxx")){
			iconid = R.drawable.app_icon_xxx;
		}else if(packagename.equalsIgnoreCase("com.my.xxx")){
			iconid =R.drawable.app_icon_xxx;
		}else if(packagename.equalsIgnoreCase("com.my.xxx")){
			iconid = R.drawable.app_icon_xxx;
		}else if(packagename.equalsIgnoreCase("com.my.xxx")){
			iconid = R.drawable.app_icon_xxx;
		}
		Log.e("Load App Icon", "App PackageName is ="+packagename);
		return iconid;
	}

到此处功能就基本实现了,可以看到基本都是简单的一些操作,只是在源码中添加了一点自己的判断增加了一部分自己的图片资源而已。

效果图就不贴了,很简单。基本可以实现所有图标的自定义,只需要知道PackageName即可,这也让我忽然想到了目前很多Launcher是可以换主题的,这大概也是算是简单的一个Launcher换主题的方法了,如果后期再统一加上图标背景的话应该会更能形成一致的风格显示。

简单记录下。

时间: 2024-10-12 03:39:27

Launcher2 自定义应用快捷方式图标的相关文章

Launcher2 给桌面快捷方式图标加默认背景

想要很透彻的看懂launcher2的所有代码还是需要花费不是时间的,起码目前来说只能是有什么需求才会看需求相关的那部分代码了. 网上很多资料了,给桌面的快捷方式图标都加入统一的背景图使其风格统一,根据个人的欣赏水平区分可能有好有坏吧. 直接看代码了. 首先需要看的代码肯定是Launcher.java了,习惯性的先看onCreate了 看代码过程不表,直入主题看与本次内容有关的,onCreate中的这几行代码 if (!mRestoring) { if (sPausedFromUserAction

C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标

#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次 C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设置成自己想要的图标,就想QQ安装之后在桌面的快捷方式一样 2012-08-25 09:21网友采纳 在创建快捷方式的时候是可以指定图标的啊.当然你最好把那图标文件(扩展名是ico)放在打包的文件夹中,不然你是不能指定的.

Win7旗舰版 去除桌面快捷方式图标上的小箭头

具体操作步骤如下: 1.利用键盘上的快捷组合键 “win+r” 打开运行程序,在运行窗口中输入 “regidit” 按回车键确定 2.在注册表编辑器窗口,依次点开 HKEY_CLASSES_ROOT\lnkfile,将 "lnkfile” 子项中的 “IsShortcut” 字符串值项右键删除掉 3.展开 “HKEY_CLASSES_ROOT\piffile” 将 ”piffile” 子项中的 ”IsShortcut” 字符串值项右键删除 4.退出注册表编辑器,重新启动计算机,开机后即可看到Wi

windows重建图标缓存(解决快捷方式图标丢失,图标加载时间长问题)

新建一个文本文档,把下边的代码输入进去,保存为.bat格式,运行即可 有快捷方式图标丢失或者觉得图标加载速度慢了,就run一下这个,很实用的小工具 rem 关闭Windows外壳程序explorer taskkill /f /im explorer.exe rem 清理系统图标缓存数据库 attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db" del /f "%userprofile%\AppData\Local\

Android创建快捷方式图标

一个方法,在APP需要的时候调用该方法即可: public void createShortcutIconInHomeScreen() { Intent addIntent = new Intent(); addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent()); addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "快捷方式名字"); // 不重复创建快捷方式图标. addI

Ubuntu 中为应用程序添加快捷方式图标(eclipse为例)

1.下载eclipse包在某个目录下解压 ,此处以home/wy/CREST/目录为例 2.新建 eclipse.desktop文件,输入内容如下: [Desktop Entry] Name=eclipse Name[zh_CN]=eclipse Comment=eclipse Client Exec=/home/wy/CREST/eclipse/eclipse Icon=/home/wy/CREST/eclipse/icon.xpm Terminal=false Type=Applicatio

Win10桌面快捷方式图标消失了怎么办

不少使用windows10系统的朋友都反映,自己的电脑在运行一段时间后,桌面上的快捷方式图标突然全都不见了,这该怎么办呢?桌面快捷方式不见会带来很多不便之处.下面,小编就为大家介绍win10系统恢复桌面快捷方式图标的方法. 具体方法如下: 1.[数学输入面板]快捷方式: 右键点击系统桌面空白处,在右键菜单中点击[新建(W)]-[快捷方式(S)]: 2.在打开的创建快捷方式-请键入对象的位置(T)窗口,输入: C:\Program Files\Common Files\Microsoft Shar

windows桌面快捷方式图标上面怎么老是会产生一个问号解决方案

桌面快捷方式图标上面怎么老是会产生一个问号(获取帮助符号)? 新建一txt文件,如:a.txt, 复制该代码:for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"改后缀名为.bat类型,如:a.bat , ,而后双击直接运行即可解决问题.

gnome3增加自定义程序快捷方式

1. 安装alacarte 在命令行输入下列命令安装alacarte程序 yum -y install alacarte 安装完毕后,在命令行输入下列命令即可启动alacarte来管理所有程序的快捷方式 #alacarte 你可以在你要添加快捷方式的位置点击New Item按钮来添加快捷方式,这里和gnome2操作是一样的 2.手动增加快捷方式配置文件 Desktop Entry 文件以".desktop"为后缀名,保存程序.desktop文件的目录有下面两个: 保存用户的应用程序快捷