格式化文字

Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本

TextBlock 物件是建立文字行的 Factory。您可以透過 TextElement 物件指定 TextBlock 的內容。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_TOPIDEOGRAPHIC_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.lineRotation 屬性,然後再呼叫 TextBlock.createTextLine() 方法來建立文字行。

若要旋轉文字區塊或區段內的字符,請將 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); 
        } 
    } 
}