2010-02-12 81 views
3

我有一个appwidget应用程序,并希望使用户能够创建可在运行时应用的皮肤。我的首选解决方案是使用带有9个patch png图像的apk文件,这些图像可以伸展以适应widget的ImageView,但是看起来我可能不得不使用另一种打包技术(例如zip文件)。寻找一个优雅的appwidget皮肤解决方案

我已经试过什么: 导入9个补丁资源,可绘制与context.getResourcesForApplication(my.app).getResources ......,他们使用的帆布使用setImageViewBitap位图转换为位图和设置为远程视窗。 这没有效果,因为我需要在转换过程中指定结果视图(myBitmap.setBounds(..,..))的大小,并且我的appwidget中的某些宽度/高度不固定。也许有一种方法可以让我错过的高度等。

使用setImageViewUri() 直接导入资源到RemoteView这不起作用,因为该函数似乎没有读取android.resource:// Uri的了(我在ImageView源代码中搜索过,它似乎只是读取文件路径和内容:// Uri's)

使用setImageViewResource()将资源直接导入到RemoteView中,因为从外部软件包检索到的ID显然不包含软件包引用,所以无法正常工作。

我想避免的是硬编码所有我的appwidget宽度和高度,或使用单独的打包方案。

有没有人很好地实现了appwidget皮肤,并且想分享知识?或者,我的逻辑中可能会出现一个可以指出的地方。

如果需要,我可以提供代码,但我现在没有任何内容。

+0

萨姆嗨,你可以给我们更多的德关于内容提供商使用和尺寸问题的尾巴?或更好的代码示例? 谢谢 – 2011-01-19 14:30:43

回答

2

我发现这个样品溶液http://www.siroccosoftware.com/devblog/?p=10

ImageView的

Uri path = Uri.parse("android.resource://PACKAGE_NAME/RESOURCE_ID"); 

views.setImageViewUri(ID, path); 

远程视窗

RemoteViews views = new RemoteViews("PACKAGE_NAME", "LAYOUT_RESOURCE_ID"); 
+0

感谢分享 – roflharrison 2012-03-26 02:30:57

1

我在尝试解决此问题时遇到了ImageView的代码。

事实证明,如果URI不是“内容”URI,则ImageView会尝试通过调用Drawable.createFromPath(mUri.toString())来打开它,它基本上需要一个路径而不是URI。

如果你去掉你的URI的“file:///”部分,它会工作得很好。

所以,你可以按以下步骤更新您的代码:

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

这将工作从SD设置图像,但我不认为它会延伸九个补丁,在你的测试吗? – roflharrison 2011-08-18 04:14:13