Просмотр полной версии : Размеры TextArea в зависимости от текста.
Astraport
29.07.2012, 22:03
Программно создается флексовский элемент TextArea. Нужно создать его так, чтобы весь текст был виден полностью, без скролов. Например по ширине 300 пикселей, а по высоте как получится с учетом того что шрифт может быть разный.
VerticalScrollPolicy программно не задается. Свойств textWidth и textHeight как у textField не имеется. Как решать - не понятно.
Так это. У него же есть ссылка. TextArea#textField
Astraport
30.07.2012, 08:57
Так это. У него же есть ссылка. TextArea#textField
КорДум, если честно, то не понимаю где ты её видишь. Видимо я должен указать что это Spark для мобильных, но это не важно.
Пока нашел такой костыль. Создавать экземпляр TextField с заданным текстом не добавляя на сцену, высчитывать у него textHeight и задавать этот размер для TextArea.
В мобильном скине используется StyleableTextField в качестве textDisplay и у него есть, как у наследника TextField, textWidth и textHeight.
Как решать - не понятно.
Создать свой мобильный скин без scroller'a.
Zebestov
30.07.2012, 12:52
Почему этот раздел.
Astraport
30.07.2012, 13:24
Почему этот раздел.
Да сначала думал, что вопрос скорее as3 плана, считать текстовые метрики.
В мобильном скине используется StyleableTextField в качестве textDisplay и у него есть, как у наследника TextField, textWidth и textHeight.
Вчера нашел (http://stackoverflow.com/questions/10618293/autosizing-flex-mobile-spark-textarea-component) такое решение:
for(var i:int=0; i < StyleableTextField(txt_genel.textDisplay).numLines; i++) {
ta_height += StyleableTextField(txt_genel.textDisplay).getLineMetrics(i).height;
}
txt_genel.height = ta_height;
Но по-моему это тоже самое что я делаю - меряю textField.
По сути у меня текст может быть разным - и 10 знаков и 200 знаков. Ширина задается, а вот по высоте текстовый блок должен ресайзиться. И ещё закавыка в том, что текст может быть многострочным и все это тоже нужно считать.
Создать свой мобильный скин без scroller'a.
Да я посмотрел код spark.skins.mobile.TextAreaSkin и побоялся скроллер удалять. Он там на всем завязан и непонятно как скажется на производительности и возможных ошибках - итоговое TextArea приходится вращать, ресайзить, таскать и т. п.
Вчера нашел такое решение... Но по-моему это тоже самое что я делаю - меряю textField.
StyleableTextField это и есть TextField. Зачем дополнительные танцы с бубном?
Да я посмотрел код spark.skins.mobile.TextAreaSkin и побоялся скроллер удалять. Он там на всем завязан и непонятно как скажется на производительности и возможных ошибках - итоговое TextArea приходится вращать, ресайзить, таскать и т. п.
В компоненте он указан как requested = false. В конце-концов что мешает использовать непосредственно StyleableTextField, зачем еще обвязка в виде TextArea, если его возможности все равно не используются.
Astraport
30.07.2012, 13:54
В конце-концов что мешает использовать непосредственно StyleableTextField, зачем еще обвязка в виде TextArea, если его возможности все равно не используются.
По-моему это примитив не поддерживающий эффектов, а мне нужны к тексту тени, глоу и т. п.
Добавлено через 1 минуту
Класс StyleableTextField - это текстовый примитив, который используется в темах оформления и средствах визуализации элементов ActionScript. Он не может использоваться в разметке MXML и несовместим с эффектами.
Добавлено через 18 минут
Проверил - работают фильтры. Странно. Попробую использовать. Спасибо.
strangedk
30.07.2012, 14:13
Может конечно не в тему, но т.к. не указано нужно ли редактировать текст - скажу что Label вроде не имеет подобных проблем.
Astraport
30.07.2012, 14:17
Нужно редактировать.
Добавлено через 5 минут
Не получается использовать, сразу нарвался на ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.utils::MatrixUtil$/decomposeMatrix()[E:\dev\4.y\frameworks\projects\framework\src\mx\utils\MatrixUtil.as:145]
at spark.components.supportClasses::StyleableTextField/get http://www.adobe.com/2006/flex/mx/internal::measuredTextSize()[E:\dev\4.y\frameworks\projects\mobilecomponents\src\spark\components\supportClasses\StyleableTextField.as:272]
at spark.components.supportClasses::StyleableTextField/getPreferredBoundsWidth()[E:\dev\4.y\frameworks\projects\mobilecomponents\src\spark\components\supportClasses\StyleableTextField.as:1612]
А для спарка такое не пройдет в своей вариации?
private function resizeMe(field:TextArea) :void
{
field.validateNow();
field.mx_internal::getTextField().autoSize = TextFieldAutoSize.LEFT;
field.height = field.mx_internal::getTextField().height;
}
Astraport
31.07.2012, 23:33
Привет!
ReferenceError: Error #1069: Property http://www.adobe.com/2006/flex/mx/internal::getTextField not found on spark.components.TextArea and there is no default value.
Да понятно что в прямую не пройдет, я же говорю может там есть подобие. spark_internal например :о)
1. Нет никакого spark_internal используется только mx_internal.
2. Отображаемый текст часть скина, к тому же необязательная, его может и не быть (как бы это странно не звучало) или он может быть еще не создан на момент проверки.
3. Вместо костылей и танцев с бубном проще сделать свой скин без скроллера, простой как две копейки.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.