自动调整动态文本字体大小 as3

3

我有一个动态文本字段,必须具有固定的宽度和高度。

实际填充动态文本字段的文本是可变的。

如果文本不能完全显示在文本字段的尺寸内,我想要做的是减小字体大小。

您有什么好的想法可以准确地执行这个操作吗?

此外,我正在使用AS 3。

3个回答

4
如果你还在寻找解决方案,可以尝试以下方法:(假设你的文本框设置为“多行”并且在初始化时只有一行高度)
var smallLimit:int = 10;
var format:TextFormat = new TextFormat();

tf.text = "THIS IS WAY TOO LONG";

var testSize:int = 200;
while( testSize > smallLimit ){

    updateFormat( testSize );
    //trace( tf.numLines  );

    if( tf.numLines > 1 ){
        testSize--;
    }else{
        testSize = smallLimit;
    }
}

function updateFormat(size:int):void{
    format.size = size;
    tf.setTextFormat( format );
}

它有效了!感谢NHubben和其他所有人。但是还有一个小问题,它会将文本调整大小以适合一行。是否有任何方法在调整大小之前将多余的文本移动到下一行。即适合TextField的宽度和高度。非常感谢。 - echez
不要检查行数,而是可以设置目标宽度和高度并逐一检查。如果宽度很好,但高度不好,就缩小它并再次检查。值得花些时间熟悉TextFormat和TextField的操作技巧。干杯! - NHubben
1
有人刚刚在一个新帖子中发布了这个片段,问了同样的问题:http://icodesnip.com/snippet/actionscript-3/scale-text-to-fit-in-textfield-scale-textfield-to-fit-text - NHubben
非常感谢大家,那个链接真的很有帮助,NHubben。多谢! - echez

0

试试这个:

var tfspecial:int = tfFontSize + tfInterLine;

while (tf.numLines < tf.height * tfspecial) {
    tf.height += tfspecial;
}

嘿2smacks,感谢你的回答。但请原谅我的无知,我是个新手,你刚才说的好像是一种陌生的语言。哈哈,我不知道如何实现那段代码,请详细说明一下。 - echez
有些奇怪的事情发生在“… numLines<tf…”中,所以我调整了间距和格式,并进行了一些清理,以便整个东西能够显示。 - Aaron
tf 是你的文本框。 你不明白什么? - 2smacks

0

我写了这个函数,但不知道为什么它只能在动态文本上运行一次。当替换tf上的内容时,它无法正确设置tfHeight。但如果您设置恒定的tfHeight值而不是var tfHeight = tf.height,则可以正常工作。

function fitFontSize(tf:TextField){
    //pobieramy oktualna wysokosc pola tekstowego
    var tfHeight = tf.height;
    // ustawiamy automatyczne rozszerzanie sie pola ze wzgledu na zawartosc
    tf.autoSize =  TextFieldAutoSize.LEFT ;
    // tworzymy obiekt tekst format
    var myFormat:TextFormat = new TextFormat();
    //ustawiamy poczatkowa wielkosc fonta na 100
    var tfFontSize:Number =100;
    // przypisujemy do obiektu
    myFormat.size = tfFontSize;
    tf.setTextFormat(myFormat);
    /*Z PETLI FOR POMNIEJSZAMY SUKCESYWNIE CZCIONKE O JEDEN
PIKSEL DO MOMENTU GDY tf TEKSTOWE OSIAGNIE POŻADANĄ 
WYSOKOSC LUB MNIEJSZA*/

    for (var i:int = 0; i<100; i++){
        tfFontSize-=1;
        myFormat.size = tfFontSize;
        tf.setTextFormat(myFormat);
        if (tf.height<= tfHeight){
        break;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接