Как приложение Gmail для Android выполняет волшебство веб-просмотра-заголовка-оверлея для просмотра переписки по почте?

Использование hierarchyviewer в представлении бесед 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. Я хотел бы знать следующее: Как рассчитываются эти смещения?


person Roberto Tyley    schedule 28.11.2011    source источник


Ответы (1)


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

В блоге разработчиков Android есть короткая запись, в которой рассказывается о методе addJavascriptInterface():

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

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

person Roberto Tyley    schedule 28.11.2011
comment
Не могли бы вы помочь мне больше в этом? Я пытаюсь реализовать это с давних пор. - person Ganesh AB; 09.12.2014
comment
Прошло 4 года, а многие из нас все еще пытаются добиться такого же результата на Android. Я понимаю, что Google не хочет, чтобы было много клонов GMail, но если они хотят, чтобы в их магазине было больше хороших приложений, они должны помочь нам с некоторыми надежными способами смешивания собственного пользовательского интерфейса и HTML — в этом есть огромная потребность. - person eselk; 17.06.2015