寻找优雅的appwidget皮肤解决方案

时间:2010-02-12 01:54:30

标签: android android-appwidget

我有一个appwidget应用程序,并希望用户能够创建可在运行时应用的外观。我的首选解决方案是使用带有九个补丁png图像的apk文件,这些图像可以伸展以适合ImageView的小部件,但是它看起来像我可能需要使用其他打包技术(例如zip文件)。

我尝试过的: 使用context.getResourcesForApplication(my.app).getResources ...将九个补丁资源导入Drawable,使用画布将它们转换为位图,并使用setImageViewBitap将位图设置为RemoteView。 这不起作用,因为我需要在转换过程中指定结果视图的大小(myBitmap.setBounds(..,..)),并且我的appwidget中的一些宽度/高度不固定。也许有办法达到我错过的高度等。

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

使用setImageViewResource()将资源直接导入RemoteView,但由于从外部包中检索到的ID显然不包含包引用,因此无效。

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

有没有人很好地实现appwidget皮肤并希望分享知识?或者,我的逻辑中可能存在一个可以指出的漏洞。

如果需要,我可以提供代码,虽然我现在没有。

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

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

事实证明,如果URI不是“内容”URI,那么ImageView会尝试通过调用Drawable.createFromPath(mUri.toString())来打开它,而views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 实际上需要路径而不是URI。

如果您删除了URI的“file:///”部分,它就可以正常工作。

因此您可以按如下方式更新代码:

{{1}}