我在我的应用程序中有一个活动,其中生成了所有已安装应用程序的ListView。除了应用程序名称外,还显示应用程序图标。我创建了一个包含有关应用程序的所有信息(包括图标)的对象数组,并使用以下方式检索图标:
drawableAppIcon = mPackageManager.getApplicationIcon(apps.applicationInfo);
当application
是一个<PackageInfo>
对象时,存在一个问题。尽管我可以轻松访问所有可绘制的图像,但各种应用程序似乎提供各种质量的可绘制图像;一个应用程序图标可能非常高分辨率,而另一个则是低分辨率版本。我本以为上面这行代码会考虑屏幕大小并找到适当的图标,但事实并非如此。是否有一种替代方法来考虑屏幕大小?或者更好的是,是否有一种方法可以提取最高分辨率的图标,然后根据屏幕大小进行缩放,从而基本保证它们都看起来很清晰?
编辑:我已经找到了一个解决方案,但它只适用于Android 4.0及以上版本。
try {
Context otherAppCtxt = context.createPackageContext(apps.applicationInfo.packageName, Context.CONTEXT_IGNORE_SECURITY);
info.drawableAppIcon = otherAppCtxt.getResources().getDrawableForDensity(apps.applicationInfo.icon, DisplayMetrics.DENSITY_XHIGH);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
供他人参考,这个方法可行。如果有人有针对旧版本安卓的解决方案,那将非常有帮助。