AutoSizing Flex Mobile искровой текстовый компонент

Я хочу, чтобы мой мобильный искровой компонент textarea обернул весь контент. Я узнал, как это сделать, используя mx_internal, но я не могу вызвать метод mx_internal::getTextField(). NumLines - такого нет... Кто-нибудь, кто делал это раньше?

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;

Здесь решение с небольшим пользовательским классом 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 слишком сильно увеличивается. Должно быть управление.

Другие вопросы по тегам