更改文本大小并保持文本垂直居中

时间:2015-03-04 20:31:07

标签: actionscript-3 flash

如何更改动态文本字段的textSize并将文本保留在基线上?当我调用此函数并且它影响文本的大小时,随着文本大小的减小,文本在文本字段中逐渐向上升起。

function autoFormatSize(myTextField)
{
    if (! textFormat && ! textSize)
    {
        var textFormat:TextFormat = new TextFormat();
        var textSize:int = new int();
    }
    textFormat.size = 50;
    textSize = 50;
    for (var i=0; myTextField.textWidth>myTextField.width-10; i++)
    {
        textSize--;
        textFormat.size = textSize;
        myTextField.setTextFormat(textFormat);
    }
}

更新

以下是我尝试做的事情的直观说明: ProcessIllustration

4 个答案:

答案 0 :(得分:2)

使用textHeight获取文本的高度。以下是将文本字段放在行的mc上的方法:

var tfMain: TextFormat = new TextFormat();
tfMain.size = 100;
tMain.setTextFormat(tfMain);
trace(tMain.textHeight);            
tMain.y = Math.ceil(mcUnderline.y - tMain.textHeight);

使用ceil确保它在x上。

答案 1 :(得分:2)

创建一个Sprite并将其添加到舞台,然后根据Sprite对齐您的TexField。如下面编码

with(bg.graphics) {
        clear();
        beginFill(0xeeeeee, 1);
        lineStyle(1, 0x999999);
        drawRect(0, 0, 200, 30);
        endFill();
    }
    txt.x = bg.x + bg.width/2 - txt.width/2;
    txt.y = bg.y + bg.height/2 - txt.height/2;

答案 2 :(得分:1)

考虑到您的评论,您是否考虑过使用autoSize?类似的东西:

var tf:TextField = yourTextField; //on timeline

tf.autoSize = TextFieldAutoSize.LEFT;
var textFormat:TextFormat = new TextFormat();
textFormat.size = 14;
var oldY:Number = tf.y + tf.height;

tf.setTextFormat(textFormat);
tf.y = oldY - tf.height;

答案 3 :(得分:1)

要将文字调整到文字字段,您必须为文字的每一边考虑2px gutter,因此您的功能可以是这样的:

function autoFormatSize(myTextField)
{
    var gutter:int = 2 * 2;  // 4px

    var textSize:int = 50;
    var textFormat:TextFormat = new TextFormat();
        textFormat.size = textSize;

    for (var i:int = 0; myTextField.textWidth > myTextField.width - gutter; i++)
    {
        textSize --;
        textFormat.size = textSize;
        myTextField.setTextFormat(textFormat);
    }

    myTextField.height = myTextField.textHeight + gutter;

}

希望可以提供帮助。