我想使用图标包中的图标。我知道如何找到已安装的图标包。但是我不知道如何从图标包中加载图标。
查找图标包-作品
这就是我如何找到图标包:
private static ArrayList<String> getInstalledIconPacks(String filter)
{
ArrayList<String> packs = new ArrayList<>();
List<ResolveInfo> infos = MainApp.get().getPackageManager().queryIntentActivities(new Intent(filter), PackageManager.GET_META_DATA);
if (infos != null)
{
for (int i = 0; i < infos.size(); i++)
{
ActivityInfo activity = infos.get(i).activityInfo;
String packageName = activity.packageName;
if (packageName != null)
packs.add(packageName);
}
}
return packs;
}
现在用户可以选择图标包。然后,我尝试从图标包中加载一个图标,如下所示:
从图标包中加载应用图标-不起作用
public static Drawable getIconPackIcon(String packageName)
{
L.d(AppUtil.class, "PackageName: " + packageName);
String componentName = MainApp.get().getPackageManager().getLaunchIntentForPackage(packageName).getComponent().toString();
L.d(AppUtil.class, "componentName: " + componentName);
try
{
//Resources res = MainApp.get().getResources();
Resources res = MainApp.get().getPackageManager().getResourcesForApplication(packageName);
int identifier = res.getIdentifier(componentName, "drawable", packageName);
L.d(AppUtil.class, "identifier: " + identifier);
if (identifier == 0)
return null;
Drawable d = res.getDrawable(identifier);
L.d(AppUtil.class, "d: " + d);
return d;
}
catch (PackageManager.NameNotFoundException e)
{
L.e(AppUtil.class, e);
return null;
}
}
但标识符始终为0。我不知道怎么做才对...
例如,我知道WhatsApp在图标包中。我的调试输出是:
PackageName: com.whatsapp
componentName: ComponentInfo{com.whatsapp/com.whatsapp.Main}
identifier: 0
3条答案
按热度按时间qojgxg4l1#
一个修改过的(希望是rickythefoxes类的无错误版本-在掩码和图标包不包含图标的情况下存在问题。)
enxuqcxy2#
您忘记了从xml文件加载元数据的步骤。
这里是我在应用中用来加载图标包的类的完整源代码,
load
方法执行appfilter.xml解析:v440hwme3#
您可以使用此库轻松加载iconpack图标。
Gradle:
代码示例(Kotlin):
Github:IconPackManager