将 RemoteView 转换为视图

Posted

技术标签:

【中文标题】将 RemoteView 转换为视图【英文标题】:Converting RemoteView into a View 【发布时间】:2013-06-30 21:56:50 【问题描述】:

我正在尝试将 RemoteViews 实例渲染到 Canvas 上,就像使用常规视图一样。我用

RemoteViews.apply(context, null)

它返回一个 FrameLayout,其中所有视图都嵌套并正确测量(位置和大小是正确的),但是在返回的视图上使用 .draw 后,它会呈现所有没有值的元素——TextViews 为空,AnalogClock 被重置在 00:00 等。

有什么想法吗?我迷路了:(

【问题讨论】:

尝试在调试器中进入系统库。 请发布您的 xml。您在什么时候设置 TextViews、AnalogClock 等的值? @KarimVarela 简单的 AnalogClock,xml 中除了 layout_width 和 layout_height 之外没有任何值。在设备上渲染时,显示正确的时间,在apply()返回的View中,总是显示00:00。 您必须在某处使用setTextViewText() 或其他setter 方法设置值,对吧?您确定在调用apply() 之前在右侧RemoteViews 实例上设置了适当的值吗? 你能把你的代码贴在这里吗?我的感觉是......您可能会在设置 textviews 中的值之前调用 RemoteViews.apply(context, null) 但在初始化之后调用这就是为什么它没有强制关闭但带有空值的原因。因此,将您的值设置为 textview 和时钟,然后调用您的方法 RemoteViews.apply(context, null);另外,您作为 null 传递的方法中的第二个参数是什么。 【参考方案1】:

不确定问题是否仍然存在。尽管如此,这是我对 RemoveViews 的体验。看来您不能只在返回的视图上调用 draw()。您必须将此视图添加到父容器以使其成为全局视图层次结构的一部分。例如,您有一个 Activity,其中有一个 FrameLayout。您的代码将如下所示。

FrameLayout parent = findViewById(R.id.container);
View view = RemoteViews.apply(getActivity(), parent);
parent.addView(view);

现在您应该可以看到测试了。如果你设置了监听器,它们也会正常工作。

【讨论】:

以上是关于将 RemoteView 转换为视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在android通知中增加remoteview的高度

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

将 URL 中的 ImageView 加载到主屏幕小部件的 RemoteView 中

Remoteview showNext() 和 showPrevious() 中的 ViewFlipper 不起作用

远程视图框架布局背景颜色

自定义通知Notification:自己定义通知Notification下拉后的显示样式