Использование ierarchyviewer в представлении Gmail показывает интересную и необычную иерархию макетов:
- Все сообщения в одном диалоге отображаются в одном WebView (в частности,
com.google.android.gm.CustomWebView
, видимом слева). Отрисовывается только тело сообщения - пробелы, в которых должны располагаться заголовки, остаются пустыми .
- Поверх WebView накладывается
com.google.android.gm.MessageHeaderScrollView
(видно справа), который использует HybridConversationScrollContainer
для позиционирования MessageHeaderView
в правильном положении для каждого сообщения в представлении беседы.
<->
Итак, как (и почему) это достигается? Это то, что разработчик Android может и должен стремиться воссоздать в своих приложениях?
Очевидно, почему является производительностью - WebView использует быструю встроенную визуализацию текста сообщения в WebKit, и один WebView, вероятно, более эффективен, чем отдельный WebView для каждого сообщения. Если бы кто-нибудь видел хорошие посты в блоге о преимуществах производительности, это было бы интересно.
Тем не менее, существует очевидная сложность этого подхода (против наивного использования ExpandableListView с некоторыми TextViews внутри него или чем-то еще) - HybridConversationScrollContainer
должен каким-то образом работать там, где заголовки сообщений должны идти поверх веб-рендеринг, чтобы правильно расположить MessageHeaderViews
. Я хотел бы знать следующее: Как работает с этими смещениями?