Actionscript 3 更改文本大小并使文本垂直居中

Actionscript 3 更改文本大小并使文本垂直居中,actionscript-3,flash,Actionscript 3,Flash,如何更改动态文本字段的textSize并使文本保持在基线上?当我调用此函数时,它会影响文本的大小,随着文本大小的减小,文本在文本字段中逐渐向上上升 function autoFormatSize(myTextField) { if (! textFormat && ! textSize) { var textFormat:TextFormat = new TextFormat(); var textSize:int = new in

如何更改动态文本字段的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);
    }
}
更新

以下是我试图做的一个直观说明:

考虑到您的评论,您是否想过改用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;

考虑到您的评论,您是否考虑过改用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;

使用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上。

使用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上。

创建一个精灵并将其添加到舞台,然后根据精灵对齐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;

创建一个精灵并将其添加到舞台,然后根据精灵对齐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;

将文本调整到文本字段时,必须为文本的每一面考虑A,这样您的函数可以是这样的:

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;

}

希望能帮上忙。

将文本调整到文本字段,你必须为文本的每一面考虑A,这样你的函数可以是这样的:

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;

}


希望这能有所帮助。

您需要基线处于相同的位置吗?或者将文本字段中的文本垂直对齐到底部会令人满意吗?两者都可以,我的主要目标是在文本大小减小@FygoDo时防止文本向上浮动您需要基线处于相同的位置吗?或者将文本字段中的文本垂直对齐到底部会令人满意吗?这两种方法都可以,我的主要目标是防止文本在大小减小时向上浮动@FygoI我会在有机会时尝试这段代码。谢谢你的帮助@Fygo@DrakeSwartzy不客气,但它似乎没有以什么方式工作?我不想更改文本字段的尺寸,而是希望文本移动并重新调整大小以适应它。@DrakeSwartzy是否需要将其保留为文本=它需要是可选择/可编辑的吗?我会在第一次有机会的时候尝试这段代码。谢谢你的帮助@Fygo@DrakeSwartzy不客气,但它似乎没有以什么方式工作?我不想更改文本字段的尺寸,而是希望文本移动并重新调整大小以适应它。@DrakeSwartzy是否需要将其保留为文本=它是否需要可选择/可编辑?不幸的是,我不希望文本字段在维度上被更改。谢谢你的帮助,但不幸的是,我不希望文本字段在维度上被更改。谢谢你的帮助,虽然这对我来说肯定不起作用。。。它切断文本并移动文本字段。感谢您的帮助。高度是解决方案。您希望将文本居中,并将其放置在我给您的代码下面的文本上。您还需要向上或向下移动两个文本字段,如您给出的示例所示。您也需要该代码吗?myText.y+=Math.roundmyText.height-myText.textHeight/2;好了,你是对的,好的。是的,你要一直使用textHeight来使文本看起来很好。这对我来说绝对不管用。。。它切断文本并移动文本字段。感谢您的帮助。高度是解决方案。您希望将文本居中,并将其放置在我给您的代码下面的文本上。您还需要向上或向下移动两个文本字段,如您给出的示例所示。您也需要该代码吗?myText.y+=Math.roundmyText.height-myText.textHeight/2;好了,你是对的,好的。是的,你要一直使用textHeight来使文本看起来很好。