Как приложение Gmail для Android выполняет магию наложения заголовка веб-просмотра для представления разговора по почте? - PullRequest
3 голосов
/ 28 ноября 2011

Использование ierarchyviewer в представлении Gmail показывает интересную и необычную иерархию макетов:

  • Все сообщения в одном диалоге отображаются в одном WebView (в частности, com.google.android.gm.CustomWebView, видимом слева). Отрисовывается только тело сообщения - пробелы, в которых должны располагаться заголовки, остаются пустыми .
  • Поверх WebView накладывается com.google.android.gm.MessageHeaderScrollView (видно справа), который использует HybridConversationScrollContainer для позиционирования MessageHeaderView в правильном положении для каждого сообщения в представлении беседы.

CustomWebView <-> MessageHeaderScrollView

Итак, как (и почему) это достигается? Это то, что разработчик Android может и должен стремиться воссоздать в своих приложениях?

Очевидно, почему является производительностью - WebView использует быструю встроенную визуализацию текста сообщения в WebKit, и один WebView, вероятно, более эффективен, чем отдельный WebView для каждого сообщения. Если бы кто-нибудь видел хорошие посты в блоге о преимуществах производительности, это было бы интересно.

Тем не менее, существует очевидная сложность этого подхода (против наивного использования ExpandableListView с некоторыми TextViews внутри него или чем-то еще) - HybridConversationScrollContainer должен каким-то образом работать там, где заголовки сообщений должны идти поверх веб-рендеринг, чтобы правильно расположить MessageHeaderViews. Я хотел бы знать следующее: Как работает с этими смещениями?

1 Ответ

1 голос
/ 28 ноября 2011

Кстати, единственный подход, который я могу придумать, основан на javascript - используйте javascript в WebView для сбора координат заголовка, а затем используйте WebView.addJavascriptInterface() для передачи этих координат в Java и HybridConversationScrollContainer. Я сам не пробовал делать это, поэтому не уверен, что это действительно сработает.

Там есть короткое сообщение в блоге разработчика Android, в котором говорится о методе addJavascriptInterface():

http://android -developers.blogspot.com / 2008/09 / с использованием-webviews.html

Было бы замечательно, если бы MessageHeaderScrollView мог быть выпущен как библиотека с открытым исходным кодом - я бы использовал это! - но если приложение Gmail закрыто, оно кажется нереальным.

...