android - Gmail Android 应用程序如何为邮件对话 View 执行 webview-header-overlay 魔法?

标签 android webkit webview scroll overlay

使用 hierarchyviewer Gmail 对话 View 上显示了一个有趣且不寻常的布局层次结构:

  • 所有 单个对话中的消息都在单个 WebView 中呈现(特别是 com.google.android.gm.CustomWebView,见在左侧)。仅呈现消息正文 - 标题所在的空间留空
  • 在 WebView 之上覆盖了一个 com.google.android.gm.MessageHeaderScrollView(见右图),它使用一个 HybridConversationScrollContainer 来定位一个 MessageHeaderView 位于对话 View 中每条消息的正确位置。

CustomWebView <-> MessageHeaderScrollView

那么,这是如何(以及为什么)实现的?这是 Android 开发者能够并且应该渴望在他们自己的应用程序中重新创建的东西吗?

显然,可能的原因是性能 - WebView 使用消息文本的快速 native WebKit 呈现,单个 WebView 可能比每个消息的单独 WebView 更有效。如果有人看到任何关于此性能优势的优秀博文,我会很感兴趣。

然而,这种方法存在明显的复杂性成本(反对天真地使用 ExpandableListView 和其中的一些 TextView 或其他)——HybridConversationScrollContainer 必须以某种方式计算出消息 header 应该经过的位置网络呈现,以便正确定位它的 MessageHeaderViews。我想知道的是:如何计算出这些偏移量?

最佳答案

顺便说一句,我能想到的唯一方法是基于 javascript - 在 WebView 中使用 javascript 来收集 header 坐标,然后使用 WebView.addJavascriptInterface() 将这些坐标传递给 Java和 HybridConversationScrollContainer。不过我自己还没有尝试过这样做,所以我不确定它是否真的有效。

在 android 开发者博客上有一篇短文讨论 addJavascriptInterface() 方法:

http://android-developers.blogspot.com/2008/09/using-webviews.html

如果 MessageHeaderScrollView 可以作为开源库发布,那就太好了 - 我会使用它! - 但由于 Gmail 应用程序已关闭,因此似乎不太可能。

关于android - Gmail Android 应用程序如何为邮件对话 View 执行 webview-header-overlay 魔法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301246/

相关文章:

javascript - 调用 javascript window.scrollTo 时出现 ui4j NullPointerException

ios - 如何在 Safari 浏览器上获取 WebRTC 日志

ios - 在 webview ios 中选择居中文本

Android解析sdk推送通知

android - 如何在 Android 应用程序中检查我的 API URL SSL 和非 SSL 支持?

android - 如何使用代码更改android中的锁屏壁纸?

java - Android: list 中无法识别 targetApi

google-chrome - 由于安全问题,sendBeacon API 暂时无法工作,有什么解决方法吗?

Android webview 电话 :0000 could not be loaded because net:ERR

webview - UWP 应用程序 WebView 泄漏内存,无法清除图像