设置文本格式
Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本
TextBlock
对象是用于创建文本行的工厂。
TextBlock
的内容是通过
TextElement
对象分配的。
ElementFormat
对象负责处理文本的格式设置。ElementFormat 类定义基线对齐、字距调整、间距、文本旋转以及字体大小、颜色和大小写等属性。它还包含
FontDescription
,相关内容在
使用字体
中详细介绍。
使用 ElementFormat 对象
ElementFormat
对象的构造函数可以接受一长串可选参数中的任何一个参数,包括
FontDescription
。也可以在构造函数之外设置这些属性。下面的示例演示了在定义和显示简单文本行时各个对象的关系:
package
{
import flash.display.Sprite;
import flash.text.*;
public class ElementFormatExample extends Sprite
{
private var tb:TextBlock = new TextBlock();
private var te:TextElement;
private var ef:ElementFormat;
private var fd:FontDescription = new FontDescription();
private var str:String;
private var tl:TextLine;
public function ElementFormatExample()
{
fd.fontName = "Garamond";
ef = new ElementFormat(fd);
ef.fontSize = 30;
ef.color = 0xFF0000;
str = "This is flash text";
te = new TextElement(str, ef);
tb.content = te;
tl = tb.createTextLine(null,600);
addChild(tl);
}
}
}
字体颜色和透明度 (alpha)
ElementFormat
对象的
color
属性设置字体颜色。该值是一个表示 RGB 颜色分量的整数;例如,0xFF0000 表示红色,0x00FF00 表示绿色。默认值是黑色 (0x000000)。
alpha
属性设置元素(
TextElement
和
GraphicElement
)的 alpha 透明度值。值范围介于 0(完全透明)到 1(完全不透明,默认值)之间。
alpha
为 0 的元素不可见,但仍为活动元素。此值乘以继承的 alpha 值,因而元素更为透明。
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
基线对齐和移位
行中最大文本的字体和大小决定了行的主要基线。可通过设置
TextBlock.baselineFontDescription
和
TextBlock.baselineFontSize
来覆盖这些值。可以将主要基线与文本内多个基线中的一个对齐。这些基线包括上缘线和下缘线或表意字顶部、中心或者底部。
-
A.
-
上缘
-
B.
-
基线
-
C.
-
下缘
-
D.
-
x 高度
在
ElementFormat
对象中,三个属性决定了基线和对齐特征。
alignmentBaseline
属性设置
TextElement
或
GraphicElement
的主基线。此基线是元素的“贴紧”线,所有文本的主要基线均对齐此位置。
dominantBaseline
属性指定要使用各个元素基线中的哪个基线,这决定了元素在行中的垂直位置。默认值为
TextBaseline.ROMAN
,但也可以设置为使用
IDEOGRAPHIC_TOP
基线或
IDEOGRAPHIC_BOTTOM
基线作为主要基线。
baselineShift
属性将基线沿 Y 轴移动一定像素数的距离。在正常(非旋转)文本中,正数值使基线下移,负数值使基线上移。
印刷大小写
ElementFormat
的
TypographicCase
属性指定文本大小写,如大写、小写或小型大写字母。
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
旋转文本
可按 90 度的增量旋转文本块或文本段中的字形。TextRotation 类定义了以下常量,用于设置文本块和字型旋转:
常量
|
值
|
说明
|
AUTO
|
“auto”
|
指定 90 度逆时针旋转。通常用于垂直的亚洲文字,以仅旋转需要旋转的字型。
|
ROTATE_0
|
“rotate_0”
|
指定不进行旋转。
|
ROTATE_180
|
“rotate_180”
|
指定 180 度旋转。
|
ROTATE_270
|
“rotate_270”
|
指定 270 度旋转。
|
ROTATE_90
|
“rotate_90”
|
指定 90 度顺时针旋转。
|
若要旋转文本块中的多行文本,请在调用
TextBlock.createTextLine()
方法创建文本行之前设置
TextBlock.lineRotation
属性。
若要旋转文本块或文本段中的字型,请将
ElementFormat.textRotation
属性设置为字型要旋转的度数。字型是构成字符的形状,或者是由多个字型组成的一部分字符。例如,字母“a”和“i”上的点都是字形。
在某些亚洲语言中会涉及旋转字型。在这些语言中,需要将行旋转到垂直方向,但不旋转行中的字符。有关旋转亚洲文字的详细信息,请参阅
对齐东亚文本
。
下面的示例同时旋转文本块以及其中的字型,就像处理亚洲文字那样。该示例也使用日文字体:
package
{
import flash.display.Sprite;
import flash.text.*;
public class RotationExample extends Sprite
{
private var tb:TextBlock = new TextBlock();
private var te:TextElement;
private var ef:ElementFormat;
private var fd:FontDescription = new FontDescription();
private var str:String;
private var tl:TextLine;
public function RotationExample()
{
fd.fontName = "MS Mincho";
ef = new ElementFormat(fd);
ef.textRotation = TextRotation.AUTO;
str = "This is rotated Japanese text";
te = new TextElement(str, ef);
tb.lineRotation = TextRotation.ROTATE_90;
tb.content = te;
tl = tb.createTextLine(null,600);
addChild(tl);
}
}
}
锁定和克隆 ElementFormat
当
ElementFormat
对象分配给任何类型的
ContentElement
时,其
locked
属性自动设置为
true
。试图修改锁定的
ElementFormat
对象将会引发
IllegalOperationError
。最佳做法是先完全定义这类对象,然后将其分配给
TextElement
实例。
如果要修改某个现有
ElementFormat
实例,请首先检查其
locked
属性。如果该属性为
true
,请使用
clone()
方法创建对象的未锁定副本。此未锁定对象的属性可以更改,然后可以将其指派给
TextElement
实例。依据此对象创建的所有新行均具有新的格式设置。前面依据此对象创建并使用旧格式的行保持不变。
package
{
import flash.display.Sprite;
import flash.text.*;
public class ElementFormatCloneExample extends Sprite
{
private var tb:TextBlock = new TextBlock();
private var te:TextElement;
private var ef1:ElementFormat;
private var ef2:ElementFormat;
private var fd:FontDescription = new FontDescription();
public function ElementFormatCloneExample()
{
fd.fontName = "Garamond";
ef1 = new ElementFormat(fd);
ef1.fontSize = 24;
var str:String = "This is flash text";
te = new TextElement(str, ef);
tb.content = te;
var tx1:TextLine = tb.createTextLine(null,600);
addChild(tx1);
ef2 = (ef1.locked) ? ef1.clone() : ef1;
ef2.fontSize = 32;
tb.content.elementFormat = ef2;
var tx2:TextLine = tb.createTextLine(null,600);
addChild(tx2);
}
}
}
|
|
|