格式化文字
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
來覆寫這些值。您可以將主基線對齊文字內的其中一條基線。這包含上緣基線和下緣基線,或是表意字上基線、表意字中央基線或表意字下基線。
-
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.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);
}
}
}
|
|
|