使用 hierarchyviewer Gmail 对话 View 上显示了一个有趣且不寻常的布局层次结构:
- 所有 单个对话中的消息都在单个 WebView 中呈现(特别是
com.google.android.gm.CustomWebView
,见在左侧)。仅呈现消息正文 - 标题所在的空间留空。 - 在 WebView 之上覆盖了一个
com.google.android.gm.MessageHeaderScrollView
(见右图),它使用一个HybridConversationScrollContainer
来定位一个MessageHeaderView
位于对话 View 中每条消息的正确位置。
<->
那么,这是如何(以及为什么)实现的?这是 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/