是否可以在其他应用程序中充气 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() ?

单击侦听器上的通知 RemoteView

Android-Widget:使用 RemoteView 更改 ListView 选择器颜色

Android Wear 圆形模拟器充气方形布局

如何在将在 RemoteView 中使用的可绘制对象上设置颜色过滤器?

如何在不重建所有 RemoteView 的情况下部分更新应用小部件中的视图