我有一个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皮肤并希望分享知识?或者,我的逻辑中可能存在一个可以指出的漏洞。
如果需要,我可以提供代码,虽然我现在没有。
答案 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}}