【发布时间】:2013-08-22 16:26:01
【问题描述】:
我的应用中有一个活动,其中生成了所有已安装应用的 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();
}
供其他人参考,如果有人有旧版本 Android 的解决方案,这将非常有用。
【问题讨论】:
-
应用程序图标在 Android 其他地方看起来还好吗?你在你的应用程序中调整它们的大小吗?我会开始确保您使用它们的固有宽度/高度来绘制它们。