格式化文字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 屬性可設定元素 (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.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); } } } |
|