设置文本格式

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 属性设置元素(TextElementGraphicElement)的 alpha 透明度值。值范围介于 0(完全透明)到 1(完全不透明,默认值)之间。alpha 为 0 的元素不可见,但仍为活动元素。此值乘以继承的 alpha 值,因而元素更为透明。

var ef:ElementFormat = new ElementFormat(); 
ef.alpha = 0.8; 
ef.color = 0x999999; 

基线对齐和移位

行中最大文本的字体和大小决定了行的主要基线。可通过设置 TextBlock.baselineFontDescriptionTextBlock.baselineFontSize 来覆盖这些值。可以将主要基线与文本内多个基线中的一个对齐。这些基线包括上缘线和下缘线或表意字顶部、中心或者底部。

显示上缘线、基线、下缘线和 x 高度的文本
A.
上缘

B.
基线

C.
下缘

D.
x 高度

ElementFormat 对象中,三个属性决定了基线和对齐特征。alignmentBaseline 属性设置 TextElementGraphicElement 的主基线。此基线是元素的“贴紧”线,所有文本的主要基线均对齐此位置。

dominantBaseline 属性指定要使用各个元素基线中的哪个基线,这决定了元素在行中的垂直位置。默认值为 TextBaseline.ROMAN,但也可以设置为使用 IDEOGRAPHIC_TOP 基线或 IDEOGRAPHIC_BOTTOM 基线作为主要基线。

baselineShift 属性将基线沿 Y 轴移动一定像素数的距离。在正常(非旋转)文本中,正数值使基线下移,负数值使基线上移。

印刷大小写

ElementFormatTypographicCase 属性指定文本大小写,如大写、小写或小型大写字母。

 
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); 
        } 
    } 
}