This example demonstrates setting a maximum width to a multi line text field in Actionscript 3. For this text field a background is drawn based on its content size. A non limited width version is also available.
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
[SWF( backgroundColor = '0x5B5B5B', frameRate = '33', width = '400', height = '200')]
public class TextFieldWidthLimit extends Sprite {
private var format:TextFormat;
private var field:TextField;
private var background:Shape;
/*
* Word warp before the limit is reached
*/
private var widthLimit:Number = 320;
public function TextFieldWidthLimit() {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.quality = StageQuality.MEDIUM;
background = new Shape();
background.x = 10;
background.y = 10;
this.addChild(background);
format = new TextFormat();
format.font = "Verdana";
format.color = 0x000000;
format.bold = true;
format.size = 12;
format.align = TextFormatAlign.LEFT;
field = new TextField();
field.autoSize = TextFieldAutoSize.LEFT;
field.antiAliasType = AntiAliasType.ADVANCED;
field.defaultTextFormat = format;
field.type = TextFieldType.INPUT;
field.width = widthLimit;
field.multiline = true;
field.wordWrap = true;
field.text = "Advanced anti-aliasing allows font faces to be rendered at very high quality at small sizes.\n\nAdvanced anti-aliasing is not recommended for very large fonts (larger than 48 points).";
field.x = background.x;
field.y = background.y;
field.addEventListener(TextEvent.TEXT_INPUT, onTextChange);
this.addChild(field);
this.graphics.lineStyle(1, 0xFFFFFF, 0.5);
this.graphics.moveTo(widthLimit + background.x, 0);
this.graphics.lineTo(widthLimit + background.x, stage.stageHeight);
drawBackground();
}
private function drawBackground():void {
var rect:Rectangle = field.getRect(this);
var w:Number = 0;
for (var i:uint = 0; i < field.numLines; i++) {
var metr:TextLineMetrics = field.getLineMetrics(i);
if (metr.width > w) {
w = metr.width;
}
trace("Line " + i + " width: " + metr.width);
}
if (w >= widthLimit) {
w = widthLimit;
}
field.width = w;
field.height = field.textHeight;
var gra:Graphics = background.graphics;
gra.clear();
gra.beginFill(0xFFFFFF);
gra.lineStyle(1, 0x000000);
gra.drawRoundRect(0, 0, field.width + 2, field.height + 2, 6, 6);
}
private function onTextChange(evt:TextEvent):void {
drawBackground();
}
}
}





















