Как обрезать текст с помощью многоточия (...) в flex? - PullRequest
2 голосов
/ 29 ноября 2010

В моем приложении Flex у меня есть элемент управления <mx:Text> с фиксированной высотой и шириной, достаточной для отображения двух строк.Теперь, если текст слишком длинный, чтобы отображаться в две строки, я бы хотел, чтобы он был обрезан с отображением многоточия (...).Похоже, что усечение по умолчанию с многоточием присутствует с меткой, но метка не может отображать текст в две строки.Заранее спасибо !!!

Ответы [ 7 ]

4 голосов
/ 27 марта 2012

Компонент spark.components.Label наследует свойство maxDisplayedLines от spark.components.supportClasses.TextBase.Вот справка для этого конкретного свойства:

Целое число, которое определяет, будет ли и где текст обрезаться.

Усечение текста означает замену лишнего текста индикатором усечения, например"...".Индикатор усечения зависит от локали;он указывается ресурсом «truncationIndicator» в пакете ресурсов «core».

Если значение равно 0, усечение не происходит.Вместо этого текст будет просто обрезан, если он не умещается в границах компонента.

Если значение является положительным целым числом, текст будет при необходимости обрезан, чтобы уменьшить количество строк до этого целого числа..

Если значение равно -1, текст будет обрезан для отображения столько строк, сколько будет полностью умещаться в пределах высоты компонента.

Усечение выполняется только в том случае, если стиль lineBreak имеет значение"подходить";значение этого свойства игнорируется, если lineBreak "явный".

Значение по умолчанию равно 0.

Из этого мы можем видеть, что если установить свойство maxDisplayedLines равным -1, компонент отобразит столько текста, сколько сможет, и добавит «...», если ему пришлось усечь текст.

1 голос
/ 27 января 2015

Я знаю, что это старый пост, но многие люди все еще разрабатывают и поддерживают смешанные проекты Spark / MX. Поэтому я дам свои два цента людям, которые все еще сталкиваются с этой проблемой, особенно при использовании списков MX и сетей данных и при необходимости многострочного усечения в рендере.

Насколько я могу судить, вопрос о компонентах MX, использование Spark было бы хорошим выбором, но только если это возможно.

Таким образом, в случае, если «s: Label» не является выбором, я думаю, что лучший подход - расширить компонент MX Label и установить для свойства textField его multiline значение true. Это должно сработать, я сначала попробую добавить эту логику в переопределение метода updateDisplayList.

1 голос
/ 30 ноября 2010

Лучшее решение, которое я нашел, - это через метку spark и свойство maxDisplayedLines, например:

        <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:s="library://ns.adobe.com/flex/spark" >
            <s:Label text="{data.Name}" maxDisplayedLines="3" verticalAlign="middle" />
        </mx:Canvas>

Отлично сработало для меня. В целом я обнаружил, что метка искры лучше, чем метка mx, но YMMV.

1 голос
/ 29 ноября 2010

Так получилось, что класс Text в Flex 3 является подклассом Label.Это означает, что установки свойства truncateToFit в вашем текстовом элементе управления на true должно быть достаточно.

0 голосов
/ 02 июля 2012

искровой компонент Имеет свойство перехода: @see. http://blog.flexexamples.com/2009/06/15/determining-if-a-spark-simpletext-control-is-truncated-in-flex-4/

0 голосов
/ 08 марта 2012

На flex 4 вам нужно установить Label#maxDisplayedLines на значение выше 0, и оно сделает за вас отсечение.

См. this , чтобы увидеть, как настроить "... "

0 голосов
/ 21 октября 2011

У меня есть запись в блоге на эту тему, которая хорошо работает независимо от используемой версии Flex:

http://www.tjdownes.com/post.cfm/easy-string-truncation-with-ellipsis-using-ternary-operators-in-as3

Суть в следующем:

myString.slice (0, 150) .concat (myString.length> 150? "...": "");

Это приведет к усечению строки до 150 символов, а если длина строки превышает 150 символов, добавляется многоточие.

...