Есть ли многоканальный текстовый обходной путь для Flex - PullRequest
2 голосов
/ 31 августа 2009

Есть ли обходной путь для отображения многострочного текста в Flex 3? До сих пор я пробовал два элемента управления: mx: Text и mx: TextArea. С каждым элементом управления связана своя ошибка. Для справки: mx: текстовая ошибка - http://bugs.adobe.com/jira/browse/SDK-9819 mx: текстовая ошибка - http://bugs.adobe.com/jira/browse/SDK-12616. В принципе, ни один из элементов управления не обрабатывает прокрутку правильно, если вы не укажете высоту, а текст переносится на следующую строку определяется динамически Flex, на основе упаковки). У кого-нибудь есть обходной путь, который может быть полезен?

Спасибо.

Обновление: Один из методов, которые я пробовал в прошлом, состоял в том, чтобы вручную вычислить высоту элемента mx: Text. Я могу сделать это с помощью следующего:

var textItem:Text = new Text();
var len:int = value.length;
var lines:int = int(len/115) + 1;
var height:int = lines * 20;
textItem.height = height;

Хотя в mx: Text это, похоже, решает проблему, существует одна большая ошибка. Расчет в значительной степени зависит от размера шрифта, межбуквенного интервала и ширины textItem. Я могу использовать этот метод и продолжить свой проект. Тем не менее, обслуживание этого неизбежно, и с таким кодом это будет гигантский PITA.

Ответы [ 2 ]

7 голосов
/ 01 сентября 2009

Я сам несколько раз сталкивался с этим. Лучший способ получить динамическое изменение размера <mx:Text> - это оставить высоту вне текста, а затем указать процентную высоту 100% для включенных VBox, HBox и т. Д. вы:

<mx:VBox width="100%" height="100%">
    <mx:Text text="Your really long text goes here." width="100%"/>
</mx:VBox>

Поскольку это что-то вроде хака, ваш пробег может варьироваться.

Редактировать

Если вы хотите расширить вышеприведенный пример, чтобы упростить обслуживание кода, вам следует обратиться к классу TextLineMetrics. Это позволит вам измерить ширину и высоту вашего текста, принимая во внимание шрифт, размер и т. Д. Документы для TextLineMetrics можно найти здесь . Чтобы использовать приведенный выше пример, вам нужно сделать что-то вроде следующего:

var textItem:Text = new Text();
var metrics:TextLineMetrics = textItem.measureText( value );
var len:int = metrics.width;
var lines:int = int(len/textItem.width) + 1;
var height:int = lines * metrics.height;
textItem.height = height;
1 голос
/ 01 сентября 2009

Я использую класс текстовой области переменной высоты, который очень хорошо работает для меня:

package
{
    import mx.controls.TextArea;

    /**
     * TextArea that xpands to the height of the content contained
     * within. 
     * @author joel
     * 
     */ 
    public class VariableHeightTextArea extends TextArea
    {
        public function VariableHeightTextArea()
        {
            super();
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            if(this.height != int(this.textField.measuredHeight) + 5 )
            {
                this.height = this.textField.measuredHeight + 5;
            }           
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...