在 jetpack compose 中,您可以像这样使用可组合的图像轻松显示可绘制对象:
Image(painter = painterResource(id = R.drawable.my_drawable))
我正在构建一个应用程序,需要列出设备上的所有应用程序,我需要显示它们的图标。我设法使用 PackageManager
类获取图标:
val packageManager = context.packageManager
val installedPackages = packageManager.getInstalledPackages(0)
val packageInfo = installedPackages[0]
val iconId: Int = packageInfo.applicationInfo.icon
那么:
Image(painter = painterResource(id = iconId))
但应用程序每次都崩溃。不知道问题出在哪里?任何的想法?谢谢
android.content.res.Resources$NotFoundException: Resource ID #0x7f030001
答案 0 :(得分:1)
出于某种原因,icon
可能包含指向不存在的可绘制对象的标识符。
要获取应用程序图标,请使用方法 loadIcon
:
val icon: Drawable = applicationInfo.loadIcon(packageManager)
或来自 PackageManager 的方法 getApplicationIcon
:
val icon: Drawable = packageManager.getApplicationIcon(applicationInfo)
然后,使用 AndroidDrawablePainter 将 Drawable 转换为 Painter:
Image(painter = AndroidDrawablePainter(icon))
或者 DrawablePainter 在 accompanist 库中可用:
Image(painter = DrawablePainter(icon))