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