Android 寻找优雅的appwidget外观解决方案

Android 寻找优雅的appwidget外观解决方案,android,android-appwidget,Android,Android Appwidget,我有一个appwidget应用程序,希望用户能够创建可在运行时应用的皮肤。我的首选解决方案是使用带有九个补丁png图像的apk文件,这些图像可以拉伸以适合ImageView的窗口小部件,但是看起来我可能不得不使用另一种打包技术(例如zip文件) 我所尝试的: 使用context.getResourcesForApplication(my.app).getResources…导入九个可绘制的修补程序资源,使用画布将它们转换为位图,并使用setImageViewBitap将位图设置为RemoteVi

我有一个appwidget应用程序,希望用户能够创建可在运行时应用的皮肤。我的首选解决方案是使用带有九个补丁png图像的apk文件,这些图像可以拉伸以适合ImageView的窗口小部件,但是看起来我可能不得不使用另一种打包技术(例如zip文件)

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

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

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

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

是否有人很好地实现了appwidget皮肤,并希望分享这些知识?或者,我的逻辑中可能有一个漏洞可以指出


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

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

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

如果去掉URI的“file://”部分,它就可以正常工作

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

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

我找到了这个样品溶液

图像视图

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

views.setImageViewUri(ID, path); 
远程视图

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

嗨,山姆,你能给我们更多关于内容提供商使用和大小问题的详细信息吗?或者更好,一个代码示例?谢谢这将用于从SD设置图像,但我不认为它会延伸到9个补丁,是不是在您的测试中?