我有一个AppWidget应用程序,希望使用户能够创建可以在运行时应用的皮肤。我首选的解决方案是将APK文件与九个补丁PNG图像一起使用以适合窗口小部件的图像视图,但是它开始看起来我可能不得不使用另一种包装技术(例如zip文件)。

我尝试的是:将九个补丁资源导入可使用context.getResourcesForapplication(my.app).getResources ...,使用帆布将其转换为位图,并使用setimageViewBitap将其设置为远程视图。这是不起作用的,因为我需要在转换过程中指定结果视图的大小(mybitmap.setbounds(..,..)),而我的appwidget中的某些宽度/高度尚未固定。也许有一种方法来获得我错过的高度等。

使用setimageViewuri()直接将资源导入到远程视图中,这是不起作用的,因为该函数似乎不读取android.resource:// uri的uri(我在imageview source中浏览了,它似乎只读取文件路径和内容读取文件路径和内容:// uri's)

使用setimageViewResource()直接导入资源,该view不起作用,因为从外部软件包中检索的ID显然不包含软件包参考。

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

是否有人实现了AppWidget Skin的精美并想分享知识?或者,我的逻辑中可能有一个可以指出的漏洞。

如果需要,我可以提供代码,尽管我现在没有任何代码。

有帮助吗?

解决方案

我找到了这个样品解决方案 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");

其他提示

当我试图解决此问题时,我访问了imageView的代码。

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

如果您剥离URI的“文件:///”部分,则可以正常工作。

因此,您可以如下更新代码:

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top