2010-02-12 3 views
3

У меня есть приложение appwidget и вы хотите, чтобы пользователи могли создавать скины, которые можно применять во время выполнения. Мое предпочтительное решение - использовать файлы apk с девятью патчами png-изображений, которые растягиваются, чтобы соответствовать виджету ImageView, однако его начало выглядеть так, как будто мне, возможно, придется использовать другую технологию упаковки (например, zip-файлы).Ищем элегантное решение для кожи appwidget

Что я пробовал: Импорт девять патч ресурсов, Drawable с context.getResourcesForApplication (my.app) .getResources ..., превращая их в растровые изображения с помощью холста и установки растрового изображения в RemoteView с помощью setImageViewBitap. Это не сработало, потому что мне нужно было указать размер результирующего представления (myBitmap.setBounds (.., ..)) во время преобразования, а некоторые ширины/высоты в моем приложении не были исправлены. Возможно, есть способ получить высоты и т. Д., Которые я пропустил.

Импорт ресурсов непосредственно в RemoteView с помощью setImageViewUri() Это не работает, потому что функция, похоже, не читает файл android.resource: // Ури больше (я ткнул в источник ImageView, и это только кажется read files paths and content: // Uri's)

Импорт ресурсов непосредственно в RemoteView с помощью setImageViewResource(), который не работал, поскольку идентификатор, полученный из внешнего пакета, очевидно, не содержит ссылки на пакет.

То, что я пытаюсь избежать, - это жесткая кодировка всей ширины и высоты приложения, или с использованием отдельной схемы упаковки.

Кто-нибудь реализовал скины appwidget красиво и хочет поделиться знаниями? Альтернативно, в моей логике может быть дыра, где можно указать.

Я могу предоставить код, если потребуется, хотя у меня его нет здесь прямо сейчас.

+0

Привет Сэм, ты мог дайте нам больше Хвосты об использовании и распространении поставщика контента? или лучше, образец кода? Спасибо – 2011-01-19 14:30:43

ответ

1

Я натолкнулся на код для ImageView, пока я пытался исправить эту проблему.

Оказалось, что если URI не является «содержимым» URI, то ImageView пытается открыть его вызовом Drawable.createFromPath(mUri.toString()), который по существу хочет путь, а не URI.

Если вы разделите раздел «файл: ///» вашего URI, все будет хорошо.

Так что вы можете обновить свой код следующим образом:

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
+0

Это будет работать для установки изображения с SD, однако я не думаю, что он растянет девять патчей, это в вашем тесте? – roflharrison

Смежные вопросы