设置文本格式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 来覆盖这些值。可以将主要基线与文本内多个基线中的一个对齐。这些基线包括上缘线和下缘线或表意字顶部、中心或者底部。
在 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 类定义了以下常量,用于设置文本块和字型旋转:
若要旋转文本块中的多行文本,请在调用 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); } } } |
|