Flex 3 htmlText неправильно вычисляет высоту и разделяет теги диапазона

У меня сейчас две проблемы с Flex 3 htmlText.

1) Когда я устанавливаю свой текст htmlText:

myText.htmlText = <html text stored in my mysql database>

Он неправильно вычисляет высоту. В большинстве случаев над и под текстом добавляется тонна отступов (или пробелов). Я не уверен, что происходит, но он вычисляет textHeight намного выше, чем обычно.

2) Если я помещаю теги ‹span› в свой html, он автоматически удаляет их (вместо того, чтобы просто игнорировать их). Я использую теги span, чтобы иметь возможность динамически находить определенные фрагменты моего текста. Например:

‹Span class =" salutation "› Уважаемый, ‹/span› ‹span class =" tag "› [Имя] ‹/span›

вставлен в мой htmlText, и я использую их для анализа приветствия и тега моих переменных данных.

Кто-нибудь знает какие-либо решения этих двух проблем? Любые альтернативные идеи о том, как разбирать части html? Любой способ улучшить htmlText? Как правильно измерить textHeight и / или убрать отступы?

Спасибо!


person andrewpthorp    schedule 11.01.2011    source источник


Ответы (2)


По сути, для тега необходимо явно указать ширину и высоту, чтобы flex правильно рассчитал высоту этих элементов. Также вы можете использовать:

invalidateSize();
validateSize();

Для принудительной проверки размера, что иногда помогает!

person andrewpthorp    schedule 09.03.2011

  1. Добавьте эти две строки перед использованием любого XML:

    XML.ignoreWhitespace = true;
    XML.prettyPrinting = false;
    

    Это должно позаботиться о добавленных строках выше и ниже вашего текста.

    ignoreWhitespace удаляет начальные и конечные пробелы из ваших текстовых узлов.
    prettyPrinting, если задано значение true, форматирует вывод XML, отступ узлов и добавление символов новой строки, чтобы сделать его более читаемым, но также влияет на вывод текста. Например, если у вас есть такая структура:

    <p><span class="test">This is a test.</span></p>
    

    Flash выдаст:

    <p>
        <span class="test">
            This is a test.
        </span>
    </p>
    

    Это приводит к отображению вашего TextField:

    (newline)
    (newline)
    This is a test.
    (newline)
    (newline)
    
  2. Плагин Flash удалит все HTML-теги, если свойство styleSheet установлено неправильно. Итак, в вашем случае он удалит теги <span> и вместо этого добавит свои собственные теги <P> и <FONT> в соответствии с любой информацией о шрифте, которую вы указали с помощью defaultTextFormat или setTextFormat (попробуйте трассировку htmlText после того, как вы его установили - вы увидите) . Вы должны установить свойство TextField styleSheet на фактическую таблицу стилей, если хотите сохранить свои собственные теги.

  3. Разбор необходимой информации с помощью HTML-тегов - верный способ. Обычно я использую пронумерованные заполнители, такие как {0} и string.replace (), для вставки динамических значений.

person weltraumpirat    schedule 12.01.2011
comment
Я не уверен, что понимаю первую часть. Если у меня есть следующий код: if (dataProvider.allowStyles) {mainText.htmlText = dataProvider.defaultText; } Куда бы я поместил XML.ignoreWhitespace и другую строку и как они изменили бы htmlText mainText? Спасибо за совет! - person andrewpthorp; 12.01.2011
comment
Лучше всего поместить их в конструктор вашего основного класса. Они меняют способ, которым плагин Flash обрабатывает ввод XML: ignoreWhitespace удаляет начальные и конечные пробелы из текстовых узлов, prettyPrinting автоматически делает отступы и форматирует XML при его преобразовании в String, что в некоторых случаях искажает вывод текста. - person weltraumpirat; 12.01.2011
comment
Я добавил это в initializeHandler моего файла приложения по умолчанию (Editor.mxml). Это не решает мою проблему :( - person andrewpthorp; 12.01.2011
comment
Можете ли вы опубликовать реальный пример xml из своей базы данных? Просто структура была бы в порядке, вы можете заменить весь читаемый текст на Lorem ipsum. - person weltraumpirat; 12.01.2011