创建和显示文本Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本
组成 Flash 文本引擎的类可用于创建文本、设置文本格式以及控制文本。下面的类是通过 Flash 文本引擎创建和显示文本时所用的基本构造块:
TextElement/GraphicElement/GroupElement:包含 TextBlock 实例的内容
ElementFormat:指定 TextBlock 实例内容的格式设置属性
TextBlock:用于构建文本段落的工厂
TextLine:依据 TextBlock 创建的文本行
要显示文本,可从字符串创建一个 TextElement 对象,使用 ElementFormat 对象指定格式设置特征。将 TextElement 分配给 TextBlock 对象的 content 属性。通过调用 TextBlock.createTextLine() 方法创建将要显示的文本行。createTextLine() 方法返回一个 TextLine 对象,该对象包含的字符串长度与将适合的指定宽度相同。重复调用此方法,直到整个字符串格式设置为行。当没有更多的行要创建时,TextBlock 对象的 textLineCreationResult 属性将分配值:TextLineCreationResult.COMPLETE。要显示行,请将它们添加到显示列表(x 和 y 的位置值要适当)。
例如,以下代码使用这些 FTE 类显示“Hello World!This is Flash Text Engine!”,显示时使用默认的格式和字体值。在此简单示例中,仅创建了一行文本。
package
{
import flash.text.engine.*;
import flash.display.Sprite;
public class HelloWorldExample extends Sprite
{
public function HelloWorldExample()
{
var str = "Hello World! This is Flash Text Engine!";
var format:ElementFormat = new ElementFormat();
var textElement:TextElement = new TextElement(str, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = textElement;
var textLine1:TextLine = textBlock.createTextLine(null, 300);
addChild(textLine1);
textLine1.x = 30;
textLine1.y = 30;
}
}
}
createTextLine() 的参数指定新行从哪一行开始,以及新行的宽度(单位为像素)。新行通常从前一行开始,但如果新行是第一行,则为 null。
添加 GraphicElement 和 GroupElement 对象
可以将 GraphicElement 对象分配给 TextBlock 对象以显示图像或图形元素。直接从图形或图像创建一个 GraphicElement 类的实例,然后将该实例分配给 TextBlock.content 属性。按照常规的方法调用 TextBlock.createTextline() 来创建文本行。下面的示例创建两个文本行,一个用 GraphicElement 对象创建,另一个用 TextElement 对象创建。 package
{
import flash.text.engine.*;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
public class GraphicElementExample extends Sprite
{
public function GraphicElementExample()
{
var str:String = "Beware of Dog!";
var triangle:Shape = new Shape();
triangle.graphics.beginFill(0xFF0000, 1);
triangle.graphics.lineStyle(3);
triangle.graphics.moveTo(30, 0);
triangle.graphics.lineTo(60, 50);
triangle.graphics.lineTo(0, 50);
triangle.graphics.lineTo(30, 0);
triangle.graphics.endFill();
var format:ElementFormat = new ElementFormat();
format.fontSize = 20;
var graphicElement:GraphicElement = new GraphicElement(triangle, triangle.width, triangle.height, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = graphicElement;
var textLine1:TextLine = textBlock.createTextLine(null, triangle.width);
textLine1.x = 50;
textLine1.y = 110;
addChild(textLine1);
var textElement:TextElement = new TextElement(str, format);
textBlock.content = textElement;
var textLine2 = textBlock.createTextLine(null, 300);
addChild(textLine2);
textLine2.x = textLine1.x - 30;
textLine2.y = textLine1.y + 15;
}
}
}
您可以创建 GroupElement 对象,以创建一组 TextElement 对象、GraphicElement 对象和其他 GroupElement 对象。GroupElement 可以分配给 TextBlock 对象的 content 属性。 GroupElement() 构造函数的参数是一个 Vector,它指向构成组的文本、图形以及组元素。下面的示例将两个图形元素和一个文本元素组成一组,然后将它们作为一个单元分配给某个文本块。 package
{
import flash.text.engine.*;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
public class GroupElementExample extends Sprite
{
public function GroupElementExample()
{
var str:String = "Beware of Alligators!";
var triangle1:Shape = new Shape();
triangle1.graphics.beginFill(0xFF0000, 1);
triangle1.graphics.lineStyle(3);
triangle1.graphics.moveTo(30, 0);
triangle1.graphics.lineTo(60, 50);
triangle1.graphics.lineTo(0, 50);
triangle1.graphics.lineTo(30, 0);
triangle1.graphics.endFill();
var triangle2:Shape = new Shape();
triangle2.graphics.beginFill(0xFF0000, 1);
triangle2.graphics.lineStyle(3);
triangle2.graphics.moveTo(30, 0);
triangle2.graphics.lineTo(60, 50);
triangle2.graphics.lineTo(0, 50);
triangle2.graphics.lineTo(30, 0);
triangle2.graphics.endFill();
var format:ElementFormat = new ElementFormat();
format.fontSize = 20;
var graphicElement1:GraphicElement = new GraphicElement(triangle1, triangle1.width, triangle1.height, format);
var textElement:TextElement = new TextElement(str, format);
var graphicElement2:GraphicElement = new GraphicElement(triangle2, triangle2.width, triangle2.height, format);
var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>();
groupVector.push(graphicElement1, textElement, graphicElement2);
var groupElement = new GroupElement(groupVector);
var textBlock:TextBlock = new TextBlock();
textBlock.content = groupElement;
var textLine:TextLine = textBlock.createTextLine(null, 800);
addChild(textLine);
textLine.x = 100;
textLine.y = 200;
}
}
}
替换文本
您可以调用 TextElement.replaceText() 来替换您分配给 TextBlock.content 属性的 TextElement 中的文本,从而替换 TextBlock 实例中的文本。
以下示例首先使用 replaceText() 在行首插入文本,然后在行尾追加文本,最后在行的中间位置替换文本。 package
{
import flash.text.engine.*;
import flash.display.Sprite;
public class ReplaceTextExample extends Sprite
{
public function ReplaceTextExample()
{
var str:String = "Lorem ipsum dolor sit amet";
var fontDescription:FontDescription = new FontDescription("Arial");
var format:ElementFormat = new ElementFormat(fontDescription);
format.fontSize = 14;
var textElement:TextElement = new TextElement(str, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = textElement;
createLine(textBlock, 10);
textElement.replaceText(0, 0, "A text fragment: ");
createLine(textBlock, 30);
textElement.replaceText(43, 43, "...");
createLine(textBlock, 50);
textElement.replaceText(23, 28, "(ipsum)");
createLine(textBlock, 70);
}
function createLine(textBlock:TextBlock, y:Number):void {
var textLine:TextLine = textBlock.createTextLine(null, 300);
textLine.x = 10;
textLine.y = y;
addChild(textLine);
}
}
}
该 replaceText() 方法将 beginIndex 和 endIndex 参数指定的文本替换为 newText 参数指定的文本。如果 beginIndex 和 endIndex 参数的值相同,replaceText() 将在相应的位置插入指定的文本。否则,将用新文本替换 beginIndex 和 endIndex 所指定的字符。
|
|