【问题标题】:How does the Gmail Android app do the webview-header-overlay magic for the mail-conversation view?Gmail Android 应用程序如何为邮件对话视图执行 webview-header-overlay 魔术?
【发布时间】:2011-11-28 19:33:07
【问题描述】:

在 Gmail 对话视图中使用 hierarchyviewer 会显示一个有趣且不寻常的布局层次结构:

  • 单个对话中的所有消息都在单个 WebView(特别是com.google.android.gm.CustomWebView,见左侧)中呈现。仅呈现消息的正文 - 标头所在的空格留空
  • WebView 顶部覆盖了一个com.google.android.gm.MessageHeaderScrollView(见右侧),它使用HybridConversationScrollContainerMessageHeaderView 定位在对话视图中每条消息的正确位置。

那么,这是如何(以及为什么)实现的? Android 开发人员是否可以并且应该渴望在自己的应用中重新创建它?

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

然而,这种方法存在明显的复杂性成本(相对于天真地使用带有一些 TextView 的 ExpandableListView 或其他) - HybridConversationScrollContainer 必须以某种方式确定消息头应该通过网络渲染的位置,为了正确定位它的MessageHeaderViews。我想知道的是:如何计算出这些偏移量?

【问题讨论】:

    标签: android webkit webview scroll overlay


    【解决方案1】:

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

    在 android 开发者博客上有一篇关于addJavascriptInterface() 方法的短文:

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

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

    【讨论】:

    • 你能帮我更多吗?我一直在尝试实现这一点。
    • 4 年后,我们中的许多人仍在努力在 Android 上实现这种类型的东西。我知道 Google 不希望有大量的 GMail 克隆,但如果他们想要在他们的商店里有更多好的应用程序,他们应该帮助我们用一些强大的方法来混合原生 UI 和 HTML——这是一个巨大的需求。
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多