Создание динамического размера компонента списка Flex - PullRequest
0 голосов
/ 16 августа 2010

Я знаю, что есть много вопросов о динамических размерах для компонентов Flex, но этот довольно специфичен, а другие ответы не очень помогают.Вкратце, мне нужен List, размер которого точно соответствует его содержимому, если только эта высота не превышает его (динамически измеряемый) родительский контейнер.Мои требования следующие:

  • Компонент расширяет список или, по крайней мере, действует аналогично.
  • variableRowHeight и wordWrap оба равны true.
  • Высота списка не может быть меньше minHeight (примерно 32 пикселя для стрелок полосы прокрутки).
  • Высота списка не может быть больше высоты родительского контейнера.
    • Обратите внимание, что размер родительского контейнера можно динамически изменять.
  • Высота списка должна обновляться при изменении размера содержимого и родительского контейнера.
    • Обновление в режиме реального времени было бы предпочтительным, но не обязательным.
  • Не должно быть полос прокрутки, если высота содержимого меньше высоты родительского контейнера (звучит очевидно, но яУ нас тоже были проблемы с этим.)

Проблема в том, что с variableRowHeight и wordWrap очень трудно узнать размер контента в любой момент времени.Если ширина родительского контейнера будет уменьшена, в списке может произойти перенос строки, который изменит высоту содержимого.Я знаю, что могу измерить высоту содержимого списка, используя measureHeightOfItems() + viewMetrics.top + viewMetrics.bottom, но когда мне это вычислять?Какие события я должен слушать?И с чем у меня больше всего проблем - когда я должен рассчитать его для первоначальной установки размера (т. Е. Как только контент закончил заполняться)?

Я занимался этим уже несколько месяцев ивыключено, но никогда не может найти решение (хотя я близко подошел с кусками кода различной степени непонятности).Я не прошу кого-то создать полный компонент для меня, я просто надеюсь, что у кого-то есть правильные указатели, чтобы сообщить мне, как мне следует определять и обновлять размер.Я рад сделать все прототипирование для вас и обсудить результаты :).

1 Ответ

1 голос
/ 16 августа 2010

Пользовательские компоненты Flex - это, безусловно, их собственный зверь. У вас есть много посвящений, чтобы потратить месяцы, работая над одним!

Если вы еще этого не видели, вам обязательно стоит взглянуть на жизненный цикл компонентов Flex . Это ответит на ваши вопросы о том, где выполнять код. Я считаю, что measure() и commitProperties() будут важны для вашего компонента.

Я также считаю validateNow() очень полезной функцией при управлении компонентами с динамически изменяющимися дочерними и / или родительскими элементами. Я еще не выяснил, когда оптимальное время для вызова этой функции, но это кажется необходимым при расчете размеров компонентов Flex. Об этом есть информативная статья в блоге Джуды .

Удачи!

Обновление - я наткнулся на замечательную статью о жизненном цикле компонентов Flex на DevelopmentArc , которую добавляю в свой список чтения.

...