3

固定の幅と高さでなければならない動的テキストフィールドがあります。

動的テキストフィールドに入力される実際のテキストは変数です。

私がやりたいのは、テキストがテキストフィールドの寸法内に完全に表示されない場合は、フォントサイズを小さくすることです。

これを正確に実行する方法について何かアイデアはありますか?

また、AS3を使用しています。

4

3 に答える 3

4

まだ探している場合は、これを試してみてください:(これは、TextFieldが "multiline"に設定されており、初期化時に1行だけの高さであると想定しています)

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 );
}
于 2011-06-22T16:23:39.167 に答える
0

これを試して :

var tfspecial:int = tfFontSize + tfInterLine;

while (tf.numLines < tf.height * tfspecial) {
    tf.height += tfspecial;
}
于 2011-06-22T13:06:42.603 に答える
0

この関数を作成しましたが、動的テキストで1回だけ機能する理由がわかりません。tfのコンテンツを置き換えると、tfHeightが正しく設定されません。ただし、定数tfHeight値を設定した場合は機能しますinsted 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;
        }
    }
}
于 2012-05-28T12:14:56.010 に答える