固定の幅と高さでなければならない動的テキストフィールドがあります。
動的テキストフィールドに入力される実際のテキストは変数です。
私がやりたいのは、テキストがテキストフィールドの寸法内に完全に表示されない場合は、フォントサイズを小さくすることです。
これを正確に実行する方法について何かアイデアはありますか?
また、AS3を使用しています。
固定の幅と高さでなければならない動的テキストフィールドがあります。
動的テキストフィールドに入力される実際のテキストは変数です。
私がやりたいのは、テキストがテキストフィールドの寸法内に完全に表示されない場合は、フォントサイズを小さくすることです。
これを正確に実行する方法について何かアイデアはありますか?
また、AS3を使用しています。
まだ探している場合は、これを試してみてください:(これは、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 );
}
これを試して :
var tfspecial:int = tfFontSize + tfInterLine;
while (tf.numLines < tf.height * tfspecial) {
tf.height += tfspecial;
}
この関数を作成しましたが、動的テキストで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;
}
}
}