Подтвердить что ты не робот

Как получить текстовый элемент Flex для переноса слов

Я создаю приложение Adobe Flex, и у меня есть текстовый элемент управления (mx: Text), который предположительно используется, когда вам нужен многострочный текст без ссылки (в отличие от ярлыка, который представляет собой текст без ссылки на одну строку). Мой текстовый контроль не обертывается, когда я изменяю размер окна браузера меньше текста (или загружаю его с более коротким окном браузера). После консультаций с этим документом, который я нашел, казалось бы, что функция word-wrap работает только в том случае, если вы укажете абсолютную ширину в пикселях. Именно этого я и стараюсь избегать. Я хочу, чтобы текст обертывался, чтобы соответствовать размеру, указанному моему объекту Flash, чтобы он всегда был виден... есть ли способ достичь этого, через какое-то свойство, которое я пропускаю, или, возможно, другой элемент управления? Спасибо.

4b9b3361

Ответ 1

У меня была такая же проблема. В моем случае у меня был блок mx: Text (который ДОЛЖЕН был завернут), и что объект mx: Text был встроен в два контейнера mx: VBox.

Единственный способ, которым я получил текст для успешной упаковки, - это сделать ОБА из следующего:

  • поместите свойство width = 100% в контейнер EACH VBox (в котором находится текст mx:.)
  • поместите свойство width = 100% "" в EACH mx: текстовый объект (находящийся внутри этого вложения VBox)

Очень неинтуитивный, но это то, что сработало для меня.

Надеюсь, это поможет!

Джон Кинстинг

Ответ 2

Ширины и высоты процентов фактически разрешают их эквиваленты пикселей, поэтому их использование должно обеспечить обертывание и относительный размер, который вы ищете. Например:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
    <mx:Text width="100%" height="100%" text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
</mx:Application>

То есть, если у вас есть настройка ширины любого типа, относительный размер (явное число, процент, привязка на основе ограничений - например, верхний, правый, нижний, левый и т.д.), должен вызывать текст для естественного обертывания. Не работает ли этот подход с макетом, который вы используете? Без какого-либо кода трудно сказать, но вы правы - для обертывания требуется установка свойства, связанного с шириной в контейнере.

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

Ответ 3

Если вы пытаетесь заставить оболочку текста работать внутри компонента MXML, попробуйте следующее:

<mx:Text id="testText"  
  width="{ this.width }"
  height="100%"   
  text="Your text here" />

В основном вы устанавливаете ширину в ширину компонента и устанавливаете высоту на 100%, чтобы она могла корректно упаковываться, когда вы уменьшаете размер.

Ответ 4

Вы можете попробовать добавить обработчик событий к родительскому node для Event.RESIZE и вызвать метод Text object validateNow(). (Возможно, предшествует вызов invalidateSize().) Почему это не происходит автоматически, я не могу сказать.

Ответ 5

Я думаю, что применение VBox width = "100%", а ширина текста = "100%" - самый простой способ. Примечание: если текст динамически генерируется, не забудьте сделать text.percentWidth = 100

Ответ 6

Итак, христианский пример просто приложения с элементом Text внутри работы, но слишком легко испортить макет. Просто добавьте один VBox между ними, и обертка не работает:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
<mx:VBox width="100%">
    <mx:Text width="100%" height="100%" text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />    
</mx:VBox>
</mx:Application>

Ответ 7

Попробуйте установить htmlText = "true" в текстовое поле.

Ответ 8

Я мог бы сделать это, используя только mxml. Результат довольно уродлив, но я мог это сделать.

<s:Group id="propDisplay" width="100%">
    <mx:Text id="key" left="0" text="{data.key}:"/>
    <mx:Text left="{key.width}" maxWidth="{propDisplay.width - key.width}" 
                             text="{data.value}" />
</s:Group>

Ответ 9

render="invalidateSize();validateNow();
'component id'.mx_internal::getTextField().wordWrap=true"

добавьте это в свой текстовый компонент.