Как изменить ширину TextField, не растягивая текст? - PullRequest
0 голосов
/ 25 февраля 2012

Раньше я знал, как это сделать, поэтому я ЗНАЮ, что это возможно, но я не могу понять это снова. Я изменяю ширину моего TextField, устанавливая свойство width, но это деформирует текст. Я хочу изменить ширину текстового поля БЕЗ изменения внешнего вида шрифта (очевидно). Я считаю, что это как-то связано с автотекстом или каким-то другим идиотизмом (зачем мне НИКОГДА деформировать текст ?!), но я просто не могу вспомнить.

myField.width = 100; // если исходная ширина была 50, это просто растягивает поле до 100, а не добавляет 50 пикселей, в которые можно рисовать символы.

ТИА

Ответы [ 4 ]

2 голосов
/ 25 февраля 2012

В IDE нужно

a) Дважды щелкните текстовое поле. Это приведет вас в режим редактирования текстового поля. Затем измените размер.

или

b) выберите текстовый инструмент и измените его размер.

Изменение размера с помощью инструмента преобразования увеличит ширину, как если бы это была фигура (что ДЕЙСТВИТЕЛЬНО полезно в некоторых анимациях, поэтому на самом деле это не так уж идиотично)

1 голос
/ 25 февраля 2012

Я предполагаю, что ваша проблема - TextField.defaultTextFormat.

просто настройте объект TextFormat, затем в текстовом поле установите текстовый формат по умолчанию, и он должен сохранять формат текста независимо от того, что вы с ним делаете.

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

Вот маленький грязный прототип.

package src 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.TextFormat;

    public class Main extends Sprite 
    {
        private var tx:TextField;
        private var txf:TextFormat;

        public function Main() 
        {
            addEventListener(Event.ADDED_TO_STAGE, initMain);
        }

        private function initMain(e:Event):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, initMain);

            // setup a text format so you can keep your text the same all the time.
            txf = new TextFormat('Arial', 12, 0x000000);

            tx = new TextField();
            tx.width = 50;
            tx.text = "I want this text not to wrap so it will be resized at runtime."

            // Turned this on for testing purposes only.
            tx.wordWrap = true;

            tx.defaultTextFormat = txf;     // This line is the x factor most likely.

            tx.x = 100;
            tx.y = 100;

            addChild(tx);

            stage.addEventListener(MouseEvent.CLICK, toggleTextFieldSize, false, 0 ,true);
        }

        private function toggleTextFieldSize(e:MouseEvent):void 
        {
            if (tx.width == 50)
            {
                tx.width = 400;
            }
            else
            {
                tx.width = 50;
            }
        }

    }

}

Надеюсь, это то, что вы искали.

1 голос
/ 25 февраля 2012

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

** edit **

Вот пример кода того, какизменение размера TextField работает:
http://wonderfl.net/c/qbDv

, но это работает только с dynamic TextFields.TF, созданные с помощью кода, являются либо DYNAMIC, либо INPUT, но внутри IDE вы можете создать TF, которые являются STATIC и не могут быть изменены с помощью ActionScript.Поэтому вы должны изменить тип TextField или создать TF с помощью скрипта.

0 голосов
/ 25 февраля 2012

Другое решение - использовать обертку для текстового поля, например элемент Group, и просто увеличить его ширину.

...