更改默认系统应用程序图标

4
我发现一个名为Nova Launcher的启动器应用程序,它提供了更改系统应用程序外观和感觉到另一个图标包的选项,以下是来自Nova Launcher的屏幕截图。

shcreenshot from nova launcher

当我选择库存果冻豆时,它将替换系统应用程序图标为果冻豆图标包。
我想在自己的启动器应用程序中实现相同的功能,我尝试了谷歌搜索但没有找到相关内容,需要指南和建议。
我尝试设置示例主题只更改软件包名称,但它给我强制关闭,报告com.mypackagename未找到
主要活动@
private static final String ACTION_APPLY_ICON_THEME = "com.mypackage.launcher.APPLY_ICON_THEME";
    private static final String NOVA_PACKAGE = "com.mypackage.launcher";
    private static final String EXTRA_ICON_THEME_PACKAGE = "com.mypackage.launcher.extra.ICON_THEME_PACKAGE";

//    private static final String ACTION_APPLY_ICON_THEME = "com.teslacoilsw.launcher.APPLY_ICON_THEME";
//    private static final String NOVA_PACKAGE = "com.teslacoilsw.launcher";
//    private static final String EXTRA_ICON_THEME_PACKAGE = "com.teslacoilsw.launcher.extra.ICON_THEME_PACKAGE";

我只是在寻找一种方法,在我的自定义启动器中管理或编写什么来设置与Nova启动器相同的主题。
以下链接帮助我创建启动器主题,但没有找到任何设置/应用于我的启动器的方法。 启动器主题教程 示例主题 感谢您的建议。

我不明白。我认为只要你正在实现自己的主屏幕应用程序,任何图标显示都在你的控制之下。你可以为任何应用程序图标显示任何图像,对吗? - Robin
如果您熟悉Nova Launcher,那么您很容易理解。问题是,我还没有找到一种方法来编写在启动器内应用主题的代码,就像其他启动器所做的那样。 - RobinHood
我认为用户Robin是正确的。选择主题的选项只是一个选项而已。您将保存用户选择的主题,并根据其加载系统/应用程序图标。请查看项目“android-launcher-plus”中的ApplicationsAdapter.java(一个开源启动器):链接。图标及其外观都在_您_的控制范围内。编写一个Util方法来确定需要更改哪些图标,并相应地处理它们。 - Vikram
1个回答

4

罗宾先生是正确的。您可以手动完成此操作。

将所有自定义图标放入drawable文件夹中,并使用特定名称,如icon_appname.png

icon_contacts.png、icon_camera.png、icon_settings.png、icon_phone.png、icon_email.png等

或者您还可以将图像保存为包名称,例如icon_com_android_camera.png等。

只需在适配器类的GetView中设置条件即可。

        if(User selected default theme)
        {
        //use default icon from system
        }
        else
        {
            String appname = here is app name;
            String appPackageName = here is app package name;
            // You can use appname or appPackageName as per your drawable name.
            int intResource = getResources().getIdentifier("icon_" + appname.toLowerCase(), "drawable", getPackageName());
            if(intResNormal!=0)
                holder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(intResource), null, null);
            else
                //use default icon when no resource found
        }

注意:如果你正在按照包名进行操作,请不要忘记用"."替换"_"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接