Повторное измерение пользовательского средства визуализации элементов в списке - PullRequest
3 голосов
/ 16 апреля 2009

Я пишу клиент Adobe Air для службы, аналогичной Twitter.

На временной шкале (компонент «Список») у меня есть средство визуализации пользовательских элементов, которое в основном представляет собой Canvas с изображением фиксированной ширины и элементом управления Text, который является многострочным.

Если текст достаточно длинный, чтобы изменить высоту холста, он будет изменен только в том случае, если я вручную изменю ширину окна, заставляя перерисовывать все средства визуализации. Если я просто прокручиваю список, все «новые» средства визуализации будут иметь минимально возможную высоту (то есть высоту изображения).

Есть какие-нибудь идеи о том, как принудительно переизмерить рендерер, когда я устанавливаю его данные?

Заранее спасибо! :)

Ответы [ 6 ]

0 голосов
/ 18 ноября 2011

Я столкнулся с очень похожей проблемой, связанной с изменением размера средств визуализации элементов в сетке данных с использованием меток, размер которых должен изменяться в зависимости от текста. Проблема в том, что для правильного обновления многострочного текстового компонента требуется два прохода. Это работает для большинства элементов управления, потому что они постоянно обновляются и позиционируются. В списке или в таблице происходит сбой, потому что первое обновление, когда происходит изменение, вынуждает список измерять средства визуализации элементов, а затем устанавливает высоту его строки на основе возвращенного результата. Затем средство визуализации элементов обновляет себя во второй раз (на этот раз корректно измеряя себя), но список не ищет эти изменения обновления. Я принудительно проверил метку (текстовое управление) на этапе измерения, чтобы получить правильный размер текстового компонента, чтобы средство визуализации сообщало правильную измеренную высоту при первом обновлении после любого изменения. Мой квест (и мой последующий обнаруженный anser и некоторые обсуждения) здесь: ItemRenderer hieight (и изменения высоты) не отражены в строке AdvancedDataGrid

0 голосов
/ 11 апреля 2011

Сначала вы должны установить variableRowHeight в true;
В вашем itemRenderer вы должны отключить verticalScrollPolicy (я полагаю, вы это уже сделали) и сделать то же самое с текстовым элементом управления. Также установите высоту текста на 100%.
Я не пробовал это во Flex4, но в предыдущих версиях мне нужно было иметь VBox в качестве root для itemRenderer, чтобы изменить его размер в зависимости от содержимого текста, поэтому вы должны рассмотреть возможность использования экземпляра VBox / VGroup вместо Canvas.

0 голосов
/ 25 марта 2010

Если вы обрабатываете событие updateComplete, вы можете пересчитать размер там. Вероятно, это больше, чем уничтожение, поскольку updateComplete происходит каждый раз, когда выводится элементарендер, но он работает.

0 голосов
/ 09 октября 2009

Вы пытались установить variableRowHeight=true для списка?

0 голосов
/ 09 октября 2009

Я борюсь с похожими проблемами аннулирования / изменения размера. Это видео пролило некоторый свет на создание пользовательских компонентов для меня. Надеюсь, это поможет.

Вот ссылка на отличное видео инженера Adobe, рассказывающего о создании компонентов для flex в скрипте Action.

http://tv.adobe.com/watch/max-2008-develop/creating-new-components-in-flex-3-by-deepa-subramaniam/

0 голосов
/ 17 апреля 2009

попробуйте вызвать invalidateSize () для элемента данных и / или invalidateDisplayList () в списке

...