寻找优雅的Appwidget皮肤解决方案
-
20-09-2019 - |
题
我有一个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());