Я хочу сделать свой компонент mobile Spark textarea для обертывания всего содержимого. Я нашел способ сделать это mx_internal, но я не могу вызвать метод mx_internal :: getTextField (). NumLines - такого нет ... Кто-нибудь, кто делал это раньше?
Компонент AutoSizing Flex Mobile Spark textarea
comment
Если вы нашли способ сделать это; но это не работает, я думаю, вам придется поделиться кодом, чтобы мы могли диагностировать, почему он не работает.
- person JeffryHouser   schedule 16.05.2012
comment
Я пытался назначить heightInLine = {NaN} - это работает в предыдущих версиях, но не работает в 4.6. И еще один способ, который я пробовал, - это создать новый скин без прокрутки, но IDE выдала мне ошибку, из-за которой не удалось найти скроллеры в определении. Так что я прошу еще какие-нибудь предложения?
- person Zaur Guliyev   schedule 17.05.2012
comment
Вероятно, это связано с тем, что 4.6 использует StageText вместо Flash TextField. В 4.6, если вы вернетесь к старым скинам, я уверен, что это сработает. У меня нет времени искать конкретные названия скинов, но я думаю, что недавно писал об этом в блоге Flextras.
- person JeffryHouser   schedule 17.05.2012
Ответы (2)
Вот решение для мобильных устройств:
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;
person
Zaur Guliyev
schedule
21.05.2012
Вот решение с небольшим настраиваемым классом TextArea, есть комментарии, чтобы объяснить немного больше.
package
{
import mx.events.FlexEvent;
import spark.components.TextArea;
import spark.components.supportClasses.StyleableStageText;
import spark.events.TextOperationEvent;
public class CustomTextArea extends TextArea
{
private var _lineNumber:int = 1;
private var _padding:int;
private var _minHeight:int;
public function CustomTextArea()
{
super();
addEventListener(FlexEvent.CREATION_COMPLETE, function setBehaviour(event:FlexEvent):void
{
//minHeight to prevent textarea to be too small
_minHeight = height;
//padding between textarea and text component inside to calculate line number
_padding = ((textDisplay as StyleableStageText).x - x) + (width - (textDisplay as StyleableStageText).width);
//listener for text changing
addEventListener(TextOperationEvent.CHANGE, setHeight);
});
}
private function setHeight(event:TextOperationEvent):void
{
//line number is textwidth divided by component width
_lineNumber = (((textDisplay as StyleableStageText).measureText(text).width + _lineNumber * _padding) / width) + 1;
//text height is line number * text height
var newHeight:int = _lineNumber * (textDisplay as StyleableStageText).measureText(text).height;
//if new height > min height, set height
if (newHeight > _minHeight)
height = newHeight;
}
}
}
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: при большом количестве строк высота TextArea слишком увеличивается. Следует управлять.
person
jpicard
schedule
20.05.2012
он генерирует исключение в строке _padding = ((textDisplay as StyleableStageText) .x - x) + (width - (textDisplay as StyleableStageText) .width); исключение: Невозможно получить доступ к свойству или методу ссылки на пустой объект.
- person Zaur Guliyev; 21.05.2012
Вот как я использую его в mxml: ‹component: CustomTextArea id = txt_genel width = 100% skinClass = spark.skins.mobile.TextAreaSkin textAlign = left fontFamily = _typewriter contentBackgroundAlpha = 0 borderVisible = false editable = false /›
- person Zaur Guliyev; 21.05.2012
И сценарий действия, в котором я назначаю ему текст: StyleableTextField (txt_genel.textDisplay) .htmlText = ozet ['genelbilgiler'] как String;
- person Zaur Guliyev; 21.05.2012
И еще одно: когда я закомментировал эту строку заполнения и удалил ссылки на заполнение в вычислениях setHeight, она не переносила весь текст - так что он ведет себя как любая текстовая область - без разницы
- person Zaur Guliyev; 21.05.2012
Я нашел простое решение .. Все равно спасибо!
- person Zaur Guliyev; 21.05.2012
Хорошо, рада за тебя! Сожалею, что не видел ваших комментариев раньше, но если у вас есть решение, это прекрасно :) Возможно, ваше исключение было связано с тем, как вы использовали мой компонент, потому что я тестировал его с минимальными атрибутами.
- person jpicard; 21.05.2012
Просто подумайте, причиной «ссылки на нулевой объект» был ваш textDisplay - StyleableTextField, мой - StyleableStageText.
- person jpicard; 23.05.2012