Gmail Android 应用程序如何为邮件对话视图发挥 webview-header-overlay 的魔力?

2023-12-27

Using 层次结构查看器 http://developer.android.com/guide/developing/debugging/debugging-ui.htmlGmail 对话视图上显示了一个有趣且不寻常的布局层次结构:

  • All单个对话中的消息呈现在singleWebView(具体来说是com.google.android.gm.CustomWebView,如左图所示)。仅呈现消息正文 -标题所在的空格留空.
  • 在 WebView 的顶部覆盖了一个com.google.android.gm.MessageHeaderScrollView(见右图)它使用HybridConversationScrollContainer定位一个MessageHeaderView在对话视图中每条消息的正确位置。

CustomWebView <-> MessageHeaderScrollView

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

显然有可能why性能 - WebView 使用消息文本的快速本机 WebKit 渲染,并且单个 WebView 可能比每条消息的单独 WebView 更有效。如果有人看过有关其性能优势的任何优秀博客文章,我会很感兴趣。

然而,这种方法存在明显的复杂性成本(相对于天真地使用可扩展列表视图 http://developer.android.com/reference/android/widget/ExpandableListView.html里面有一些 TextViews 或者其他什么) -HybridConversationScrollContainer必须以某种方式找出消息头应该在网络渲染上的位置,以便将其定位MessageHeaderViews正确。我想知道的是:How它能计算出这些偏移量吗?


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

There isandroid 开发者博客上的一篇简短文章讨论了addJavascriptInterface() method:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gmail Android 应用程序如何为邮件对话视图发挥 webview-header-overlay 的魔力? 的相关文章

随机推荐

  • 如何在 v8 Javascript 中的多个函数中使用相同的上下文?

    我是 V8 新手 尝试在 C 和 JS 代码之间创建一些绑定 问题是我无法跨不同的 Javascript 函数访问全局 Javascript 变量 原因是因为每个 Javascript 函数都调用了不同的 C 函数 我猜我的代码的问题是我在
  • 一次保存编辑器中所有打开的 .m 文件

    运行代码 获取旧结果 确实 再次忘记保存已编辑的 m 文件之一 一次保存所有打开的 m 文件的键盘快捷键是什么 您可以添加快捷方式Save All动作 至少在我正在使用的R2015a中 I chose CTRL ALT S 如何到达那里已在
  • 有没有办法在Android上调用ActionScript?

    我的资产文件夹中有一个 SWF 文件 我需要在 Android 应用程序中使用它 所以我编写了嵌入 SWF 和 Javascript 的 html 文件来调用其 ActionScript 我可以在 WebView 中播放 Flash 文件
  • 如何将参数传递给自定义 zsh 函数?

    如何将参数传递给自定义 zsh 函数 例如 function kill port proc port lsof i tcp
  • 修改 R 中 data.table 中的值

    我是 data table 的新手 我对这个类有疑问 我有一张桌子 data1 有 2 列 Couple and Ratio Couple is the Keydata table 的 我正在尝试修改表中的值 在下面的代码中 cple是现有
  • 使用渲染插件将模板转换为 pdf 时,css 背景不起作用

    我正在使用渲染插件在 grails 中生成 pdf 我正在使用由 css 准备的背景颜色 代码在这里 container content mainContent block backgroundStyle background ffffff
  • android:将字节转换为dex时出错

    因此 在升级 build gradle 项目 后运行项目时出现以下错误 dependencies classpath com android tools build gradle 2 0 0 alpha2 NOTE Do not place
  • Rspec:如何在控制器规范中分配实例变量

    class TestController lt AplicationController private def some method unless my variable nil return true end end end 我想测试
  • 如何在Visual Studio中生成aspx.designer.cs? [复制]

    这个问题在这里已经有答案了 我当前的 aspx designer cs 无法正常工作 有人知道如何在解决方案资源管理器中重新生成 aspx designer cs 吗 Found here http labs kaliko com 2010
  • 有没有办法在Java中声明一个方法“友好”?

    我知道可以设置属性public friendly or private指定其可见性 有没有办法我可以声明friendly方法 我希望它只能从同一包的类的对象访问 谢谢你 这里是初学者 通过不输入可见性修饰符 Java 使用包私有范围 查看以
  • 如何创建具有共享表结构的多租户数据库?

    我们的软件目前运行在 MySQL 上 所有租户的数据都存储在同一个schema中 由于我们使用 Ruby on Rails 我们可以轻松确定哪些数据属于哪个租户 然而 当然也有一些公司担心他们的数据可能会受到损害 因此我们正在评估其他解决方
  • 如何限制对 codeigniter 文件夹中文件的访问

    您好 我已经使用 codeigniter 来开发我的网站 但是当在 google 中搜索我的网站时 google 会显示特定文件夹中文件 pdf 的链接 用户可以直接查看这些文件 pdf 而无需登录 我想限制谷歌直接显示这些文件的链接 例如
  • Windows 身份验证与表单身份验证

    我试图了解 Windows 身份验证 表单身份验证的概念及其差异 我很困惑 有人可以帮我澄清这一点吗 Thanks Windows 身份验证Provider 是 ASP NET 应用程序的默认身份验证提供程序 当使用此身份验证的用户登录到应
  • 变量值由函数调用决定

    这可能很奇怪 但我想声明一个没有固定值的变量 但以某种方式 链接 到函数的结果 目标是让最终用户操作变量 但每次使用变量的值时 其值可能会发生变化 这是我得到的当前结果 from random import randint def rand
  • 如何根据 pandas 中另一列的条件生成具有值的新列

    我有一个如下数据框 我需要生成一个名为 Comment 的新列 对于指定的值 它应该显示 Fail Input Tel MC WT AAA Rubber 9999 BBB Tree 0 CCC Rub 12 AAA Other 20 BBB
  • 依赖项和latest.release

    我们目前使用 grails 2 2 并尝试升级到 2 4 但遇到了问题 在BuildConfig groovy中 我们有一些使用latest release的依赖项和插件 例如 com example myplugin latest rel
  • XCode 4.2 clang 段错误

    刚刚升级到 Lion 和 xcode 4 2 现在 当我重新编译程序时 我收到以下错误 Users XXX Code iPhone XXX Code Scenes GameScene mm 1806 35 current parser to
  • 在哪里可以访问 Django Rest Framework 中的请求参数?

    我使用 Django Rest Framework 和 python requests 并通过 URL 传递多个变量 如下所示 GET api boxobjects format json make Prusa model i3 plast
  • 如何符号化Xcode崩溃日志?

    Xcode 5 管理器有一个视图 可以列出所有崩溃日志 我们可以将崩溃日志拖放到此处 但从 Xcode 6 开始 我知道他们已经将设备移出了组织 并为其提供了一个新窗口 但我没有找到一个地方可以查看我在升级到 Xcode 6 后拖放到 Xc
  • Gmail Android 应用程序如何为邮件对话视图发挥 webview-header-overlay 的魔力?

    Using 层次结构查看器 http developer android com guide developing debugging debugging ui htmlGmail 对话视图上显示了一个有趣且不寻常的布局层次结构 All单个