是否可以在其他应用程序中充气 RemoteViews?
Posted
技术标签:
【中文标题】是否可以在其他应用程序中充气 RemoteViews?【英文标题】:Is it possible to Inflate RemoteViews in other application? 【发布时间】:2017-07-03 06:52:14 【问题描述】:我正在开发两个android 应用程序,一个是baseApp,另一个是pluginApp。目的是在安装相应插件时扩展 baseApp 的功能。 pluginApp 将包含 XML 布局文件,其中包含我需要在 baseApp 中显示的“new_layouts”。有没有办法通过进程间通信或类似的方法将 new_layout 从 pluginApp 传递给 baseApp?
我尝试了以下方法但没有运气 我将 pluginApp 中的布局文件包装为“RemoteViews”对象并将其传递给 baseApp,但是当我将它膨胀到 baseApp 中时,我收到一条错误消息
android.view.InflateException: Binary XML file line #9: Class not allowed to be inflated android.widget.EditText
注意:“new_layout”在其他元素中包含一个 EditText,其中 EditText 是第一个子元素。
我以前从未使用过 RemoteViews,还不明白它们的用途。
请指导我 1. 是否可以从一个应用程序中使用视图到另一个应用程序? 2. RemoteViews 可以用于此目的吗?如果是,那怎么办? 3. 为什么会出现此错误,这表明什么?
【问题讨论】:
【参考方案1】:是否可以将视图从一个应用程序用于另一个应用程序?
不直接。
RemoteViews 可以用于此目的吗?
是的。
如果是,那怎么办?
大概是通过使用您已有的代码。 This pair of sample projects 演示了这个过程。
为什么会出现错误
因为EditText
不是the few widgets supported by RemoteViews
之一。
这说明什么?
表示你有三种选择:
仅限于RemoteViews
支持的小部件
不要尝试在应用之间共享 UI
实现自己的RemoteViews
-like 系统
最后,RemoteViews
只是一个数据结构,它描述了如何构建 UI 以及如何发送回非常粗粒度的事件(例如,点击,通过 PendingIntent
)。除了时间和专业知识之外,没有什么能阻止您创建自己的 Parcelable
数据结构来描述如何构建比 RemoteViews
支持的更丰富的 UI。
【讨论】:
非常感谢您如此快速而详尽的回复。我可能会将自己限制在可用的视图中。关于构建我自己的 Parcelable 数据结构,是否有一个示例项目可以用作指导,因为我以前从未做过这样的事情 @SukumarGaonkar:在构建包含用于构建 UI 的命令的Parcelable
数据结构方面,我不知道地球上是否有人尝试过,除了 RemoteViews
本身。如果您的意思是一般意义上的Parcelable
,我敢肯定有一些教程可供使用,尽管我手头没有。 FWIW,我的书中有一章关于Parcelable
——这里是the chapter preview。
我已将我的布局限制为允许的视图,并且它们按预期布局,但我无法更新它们。例如。我将pendingIntents附加到触发我的插件代码的每个按钮上,我在其中更新布局的内容。但这些更新在屏幕上不可见。我怀疑我需要打电话给updateAppWidget(thisWidget, rView);
。关于更新已布置的远程视图的任何指导?谢谢:)
@SukumarGaonkar:通常,您更新RemoteViews
的方式与您最初创建它们的方式相同。
您是否建议我需要重新充气并重新绘制更新 remoteView?这对内存使用和性能有什么缺点吗?再次感谢您的及时回复:)以上是关于是否可以在其他应用程序中充气 RemoteViews?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在工作线程中调用 appWidgetManager.updateAppWidget() ?
Android-Widget:使用 RemoteView 更改 ListView 选择器颜色