PDA

Просмотр полной версии : Узнать высоту текстового поля с картинками в htmlText


caseyryan
18.01.2013, 15:14
Решил добавить в приожение менеджер новостей, и сделал генерацию новостных блоков на основе html, который задается текстфилду через htmlText.
У текстового поля параметр autoSize = "none", т.е. ширина всегда фиксирована, но вот высота всего блока высчитывается уже после задания текста так:

_height = _tf.textHeight + 50; // 50 еще нужно чтобы внизу разместить дату и чекбокс "отметить прочитанным"

Все бы ничего, но вот угораздило меня вставить в новость картинку, и тут я понял, что textHeight действительно выдает именно высоту текста, и картинки в текстовом поле не учитывает. Соответственно новостной блок получается кривым. Картинки часто выезжают из блока вниз или вверх.


_tf.getBounds(this); // возвращает то же значение высоты, что и textHeight



Как можно решить проблему? Мне обязательно нужно чтобы высота картинок учитывалась

п.с. Думал решить проблему заранее указав в html высоту и ширину картинки, которая подгрузится, но флеш эти параметры похоже вообще игнорирует.

Wolsh
18.01.2013, 16:17
Вы дожидаетесь загрузки картинок во внутренние лоадеры текстфилда, или спрашиваете textHeight сразу как отдадите хтмл-текст?

Добавлено через 9 минут
хотя неважно, проверил — все равно врет.

Добавлено через 16 минут
У текстового поля параметр autoSize = "none", т.е. ширина всегда фиксированаНичто не мешает задать автосайз и при этом фиксированную ширину О_о. Поле будет менять только высоту. Но спрашивать и простой height (если он Вам еще будет нужен) все равно можно только в хендлере окончания загрузки картинок.

spirit2
18.01.2013, 17:12
Буквально сегодня заморочился похожим вопросом. Нужно было знать высоту текстфилда для прокрутки.
В итоге решил как раз простым заданием размеров картинок:
<img src="../image.png" width="100" height="80" />
Из того что нашел ещё: задают каждой картинке айдишник, вешают слушатели комплита загрузки и получают textHeight уже после загрузок.

caseyryan
18.01.2013, 18:01
Из того что нашел ещё: задают каждой картинке айдишник, вешают слушатели комплита загрузки и получают textHeight уже после загрузок.
Это я тоже находил. Кривой подход какой-то. Надо заранее знать id картинок. А мне нужна универсальность, сколько угодно картинок может быть, с любыми id.

Wolsh, спасибо, фиксированая ширина с автосайзом как раз то, что доктор прописал! :)
Как всегда грамотный совет! =)

spirit2
18.01.2013, 18:24
http://stackoverflow.com/questions/309713/flash-textfield-html-how-do-i-prevent-the-error-dialogue-for-missing-images
Слушатели как раз через id вешают.
Универсальность - это не про htmlText, только самому допиливать.

Как вариант вешать маску на поле и забыть про textHeight.

Найдете костыль покрасивее, возьму на заметку =)

Wolsh
18.01.2013, 20:35
Как всегда грамотный совет! =)Я вообще сам не люблю автосайз, но я так же не люблю картинки в тексте. Я бы никогда не посоветовал использовать автосайз для простого текста, но с учетом еще более багоопасного поведения текстфилда с картинками лучше и проще так.
Надо заранее знать id картинок. А мне нужна универсальность, сколько угодно картинок может быть, с любыми id.Просто url картинки)). Но, как я уже сказал, это не поможет узнать "правильный" textHeight. Тестировал по клику, то есть однозначно после загрузки и ентерфреймов и т.п. Высота ложная.Предустановка width и height в html мне тоже не помогли (возможно, из-за того, что картинкой был swf).

caseyryan
19.01.2013, 11:39
Как вариант вешать маску на поле и забыть про textHeight.
У меня уже все работает с автосайзом высоты. Вопрос решен, но все равно отвечу.
Использовать маску совсем не вариант, так как нужно, чтобы текст был виден целиком, без прокрутки, а не зная какой он будет высоты, нельзя заранее расчитать высоту маски.