[英]How to write a custom component to wrap and resize text automatically (in Flex)?
我知道Text組件的textAlign屬性。 但這並沒有達到我想要達到的目的:
我有一個500x100的Text組件(大小不變)。 默認字體大小為80像素。 但是,文本一直在變化。 我想要的是調整文本大小以“適合”文本字段。
假設文本更改為:“一條快速的棕色狐狸跳過了那只懶狗”。 由於字體大小太大,因此無法容納在文本字段中。 那么如何縮小textsize以使所有內容都適合並且下一行沒有內容?
在這里(直接從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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.