#android #android-jetpack #android-jetpack-compose
Вопрос:
В 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
Комментарии:
1. Пожалуйста, предоставьте трассировку сбоя и код, как вы работаете с менеджером пакетов.
2. Я изменил сообщение. Спасибо
Ответ №1:
По какой-то причине icon
может содержать идентификатор, указывающий на несуществующий рисоваемый объект.
Чтобы получить значок приложения, используйте метод loadIcon
:
val icon: Drawable = applicationInfo.loadIcon(packageManager)
Или метод getApplicationIcon
из менеджера упаковки:
val icon: Drawable = packageManager.getApplicationIcon(applicationInfo)
Затем используйте AndroidDrawablePainter для преобразования Drawable в Painter:
Image(painter = AndroidDrawablePainter(icon))
Или рисовальный рисунок доступен в библиотеке аккомпаниатора:
Image(painter = DrawablePainter(icon))
Комментарии:
1. Но
loadIcon()' returns a Drawable and
painterResource()` требует идентификатора рисоваемого объекта2. Добавьте зависимость от ядра загрузки изображений- сопровождающего или просто скопируйте файл AndroidDrawablePainter.kt в свой проект, а затем вы можете преобразовать Drawable в Painter. Я обновил ответ.
3. Я добавил
accompanist
зависимость от библиотеки в свой проект, но я получаюUnresolved reference: AndroidDrawablePainter
. И спасибо тебе4. Попробуйте DrawablePainter вместо AndroidDrawablePainter