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

Как вертикальное выравнивание TextField в AS3

Я пытаюсь вертикально выровнять некоторый текст в Monoline TextField в AS3. Не уверен, что это можно сделать с помощью TextFormat, но я так не думаю.

Я искал решение, но ничего действительно полезного. Любая помощь приветствуется.

Спасибо!

4b9b3361

Ответ 1

Вы не можете автоматически вертикально выравнивать текст. Вам нужно сделать это самостоятельно.

Вот мой рабочий код:

public static function verticalAlignTextField(tf: TextField): void {
    tf.y += Math.round((tf.height - tf.textHeight) / 2);
}

Ответ 2

Если вы можете использовать fl.text.TLFTextField вместо flash.text.TextField (доступный из Flash Player 10+), вы может вертикально центрировать текст, используя свойство verticalAlign:

import flashx.textLayout.formats.VerticalAlign;
[...]
myTextField.verticalAlign = VerticalAlign.MIDDLE;

Ответ 3

Я могу заверить, что "walkietokyo" ответ - это истинный ответ, но он должен быть использован надлежащим образом, см. документацию к Adobe "( принимает значение по умолчанию, если undefined во время каскада)" другими словами, некоторые свойства TLFTextFild могут каскадно вертикально выравнивать свойства, такие как textFormat, поэтому ставьте свойство verticalAlign после каждой вещи, чтобы каскадировать другие, тогда это будет работать. он работает со мной:)

Ответ 4

Это отлично работает только в том случае, если текст находится в одной строке.

Сначала вам нужно добавить начальную строку прерывания в каждом тексте. Я сделал это в новом компоненте, расширяющем TextField и переопределяющем функцию "text", добавляя начальный символ строки прерывания.

import flash.text.TextField;

public class MyTextField extends TextField
{
    public function MyTextField()
    {
        super();
    }

    public override function set text(value:String):void
    {
        value = "\n" + value;

        super.text = value;
    }
}

Затем вам нужно применить формат к тексту, используйте "ведущее" свойство, которое представляет количество вертикального пространства между строками.

myTextFormat = new TextFormat();

// This is the existent horizontal align
myTextFormat.align = TextFormatAlign.CENTER; 

// This is my simulated vertical align. Remember that the first character 
// is always a break line. In most cases it will be a negative value...
myTextFormat.leading = -22;   

var myTextField:MyTextField = new MyTextField();
myTextField.text = "Hello";
myTextField.setTextFormat(myTextFormat);

Я надеюсь, что это поможет кому-то, кто нуждается в вертикальном выравнивании в тексте одной строки, используя TextField. : -)