2010-02-19 26 views
1

我知道Text組件的textAlign屬性。但它不會做我想要實現的:如何編寫自定義組件以自動換行和調整文本大小(在Flex中)?

我有一個文本組件,它是500x100(大小不變)。默認字體大小爲80像素。然而,文本不斷變化。我想要的是調整文本的大小以適應文本框內的「適合」。

假設文字改爲:「一隻快速的棕色狐狸跳過了懶狗」。這不適合文本字段,因爲字體太大。那麼如何縮小文本大小以便一切都合適,而且什麼也不做到下一行?

回答

1

在這裏你去(直接從Adobe):

鑑於像素的寬度和線條顯示的最大數,HeadlineTextField改變字體大小以使文本適合字段。如果文字短,字體大小將非常大,從而創建小報風格的標題。如果文本很長,字體大小當然會更小。

下面給出的HeadlineTextField.fitText()方法的字體大小工作:

public function fitText(msg:String, maxLines:uint = 1, toUpper:Boolean = false, targetWidth:Number = -1):uint 
{ 
    this.text = toUpper ? msg.toUpperCase() : msg; 

    if (targetWidth == -1) 
    { 
     targetWidth = this.width; 
    } 

    var pixelsPerChar:Number = targetWidth/msg.length; 

    var pointSize:Number = Math.min(MAX_POINT_SIZE, Math.round(pixelsPerChar * 1.8 * maxLines)); 

    if (pointSize < 6) 
    { 
     // the point size is too small 
     return pointSize; 
    } 

    this.changeSize(pointSize); 

    if (this.numLines > maxLines) 
    { 
     return shrinkText(--pointSize, maxLines); 
    } 
    else 
    { 
     return growText(pointSize, maxLines); 
    } 
} 

public function growText(pointSize:Number, maxLines:uint = 1):Number 
{ 
    if (pointSize >= MAX_POINT_SIZE) 
    { 
     return pointSize; 
    } 

    this.changeSize(pointSize + 1); 

    if (this.numLines > maxLines) 
    { 
     // set it back to the last size 
     this.changeSize(pointSize); 
     return pointSize; 
    } 
    else 
    { 
     return growText(pointSize + 1, maxLines); 
    } 
} 

public function shrinkText(pointSize:Number, maxLines:uint=1):Number 
{ 
    if (pointSize <= MIN_POINT_SIZE) 
    { 
     return pointSize; 
    } 

    this.changeSize(pointSize); 

    if (this.numLines > maxLines) 
    { 
     return shrinkText(pointSize - 1, maxLines); 
    } 
    else 
    { 
     return pointSize; 
    } 
} 
+0

尼斯藏寶。謝謝! :) – Yeti 2010-02-19 20:13:27

相關問題