Автоматическое изменение размера динамического текста шрифта as3 - PullRequest
3 голосов
/ 22 июня 2011

У меня есть динамическое текстовое поле, которое должно быть фиксированной ширины и высоты.

Фактический текст, который будет заполнять динамическое текстовое поле, является переменной.

Я хотел бы уменьшить размер шрифта, если текст не полностью отображается в пределах размеров текстового поля.

Любые идеи о том, как я могу это точно выполнить?

Также я использую AS 3.

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

попробуйте, если вы все еще ищете: (предполагается, что ваш TextField установлен на «многострочный» и имеет высоту всего 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 );
}
0 голосов
/ 28 мая 2012

Я написал эту функцию, но я не знаю, почему она работает только один раз для динамического текста.При замене содержимого на tf он nocorectly устанавливает 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;
        }
    }
}
0 голосов
/ 22 июня 2011

попробуйте это:

var tfspecial:int = tfFontSize + tfInterLine;

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