Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje
Obiekt
TextBlock
jest generatorem służącym do tworzenia wierszy tekstu. Treść obiektu
TextBlock
przypisuje się za pośrednictwem obiektu
TextElement
. Obiekt
ElementFormat
obsługuje formatowanie tekstu. Klasa ElementFormat definiuje takie właściwości, jak wyrównanie linii bazowej, kerning, światło, obrót tekstu i wielkość czcionki, kolor oraz wielkość liter. Zawiera także obiekt
FontDescription
omówiony szczegółowo w sekcji
Praca z czcionkami
.
Korzystanie z obiektu ElementFormat
Konstruktor obiektu
ElementFormat
ma wiele różnych parametrów opcjonalnych, w tym parametr
FontDescription
. Odpowiednie właściwości można ustawić także spoza konstruktora. Poniższy przykład ilustruje relację między różnymi obiektami w ramach operacji definiowania i wyświetlania prostego wiersza tekstu:
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);
}
}
}
Kolor i przezroczystość (alfa) czcionki
Właściwość
color
obiektu
ElementFormat
służy do ustawiania koloru czcionki. Jej wartość jest liczbą całkowitą reprezentującą składniki RGB koloru, na przykład 0xFF0000 dla koloru czerwonego lub 0x00FF00 dla koloru zielonego. Wartość domyślna to 0x000000 (kolor czarny).
Właściwość
alpha
służy do określania wartości przezroczystości alfa dla elementu (zarówno klasy
TextElement
, jak i
GraphicElement
). Dozwolone są wartości z przedziału od 0 (pełna przezroczystość) do 1 (pełne krycie, wartość domyślna). Elementy z wartością
alpha
równą 0 są niewidoczne, ale wciąż aktywne. Wartość ta jest mnożona przez ewentualne odziedziczone wartości właściwości alpha, przez co element staje się bardziej przezroczysty.
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
Wyrównanie i przesunięcie linii bazowej
Czcionka i wielkość największego tekstu w wierszu wyznacza jej dominującą linię bazową. Można przesłonić te wartości, ustawiając właściwości
TextBlock.baselineFontDescription
i
TextBlock.baselineFontSize
. Dominującą linię bazową można wyrównać do jednej z kilku linii bazowych w tekście. Należy do nich linia wydłużenia górnego, linia wydłużenia dolnego lub górna krawędź, środek bądź dolna krawędź ideogramów.
-
A.
-
Wydłużenie górne
-
B.
-
Linia bazowa
-
C.
-
Wydłużenie dolne
-
D.
-
Wysokość x
W obiekcie
ElementFormat
trzy właściwości określają charakterystykę linii bazowej i wyrównania. Właściwość
alignmentBaseline
określa główną linię bazową obiektu
TextElement
lub
GraphicElement
. Jest to linia bazowa, do której element jest „przyciągany”; ponadto do tej pozycji wyrównywana jest dominująca linia bazowa całego tekstu.
Właściwość
dominantBaseline
określa, która z różnych linii bazowych elementu ma być używana; zależy od tego pionowe położenie elementu w wierszu. Wartość domyślna to
TextBaseline.ROMAN
, jednak jako dominującą linię bazową można wybrać także
IDEOGRAPHIC_TOP
lub
IDEOGRAPHIC_BOTTOM
.
Właściwość
baselineShift
przesuwa linię bazową o określoną liczbę pikseli na osi Y. W zwykłym (nieobróconym) tekście wartość dodatnia powoduje przesunięcie linii bazowej w dół, a wartość ujemna — w górę.
Wielkość liter
Właściwość
TypographicCase
obiektu
ElementFormat
określa wielkość liter, na przykład wielkie litery, małe litery lub wersaliki.
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
Obracanie tekstu
Blok tekstu lub glify w segmencie tekstu można obracać z krokiem 90 stopni. Klasa TextRotation definiuje następujące stałe określające obrót zarówno bloku tekstu, jak i glifów:
Stała
|
Wartość
|
Opis
|
AUTO
|
"auto"
|
Określa obrót o 90 stopni w kierunku przeciwnym do ruchu wskazówek zegara. Zwykle używana z pionowym tekstem azjatyckim do obracania tylko tych glifów, które wymagają obrócenia.
|
ROTATE_0
|
"rotate_0"
|
Określa brak obrotu.
|
ROTATE_180
|
"rotate_180"
|
Określa obrót o 180 stopni.
|
ROTATE_270
|
"rotate_270"
|
Określa obrót o 270 stopni.
|
ROTATE_90
|
"rotate_90"
|
Określa obrót o 90 stopni w kierunku zgodnym z ruchem wskazówek zegara.
|
Aby obrócić wiersze tekstu w bloku tekstowym, należy przypisać wartość właściwości
TextBlock.lineRotation
przed wywołaniem metody
TextBlock.createTextLine()
w celu utworzenia wiersza tekstu.
Aby obrócić glify w bloku tekstu lub segmencie, należy przypisać właściwości
ElementFormat.textRotation
liczbę stopni, o jaką glify mają być obrócone. Glif jest to kształt tworzący znak lub jeden z kształtów wchodzących w skład znaku złożonego z wielu glifów. Przykładami glifów są litera a oraz kropka w literze i.
Obracanie glifów ma zastosowanie w niektórych językach azjatyckich, w których obracanie wierszy do pionu nie jest równoznaczne z obróceniem znaków w tych wierszach. Więcej informacji o obracaniu tekstu azjatyckiego zawiera sekcja
Justowanie tekstu w językach wschodnioazjatyckich
.
Poniższy przykład ilustruje obrót bloku tekstu i glifów w tym bloku, co jest typowym sposobem obrotu w przypadku tekstu azjatyckiego. W przykładzie zastosowano także czcionkę japońską:
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);
}
}
}
Blokowanie i klonowanie obiektu ElementFormat
Gdy obiekt
ElementFormat
zostanie przypisany do dowolnego typu obiektu
ContentElement
, jego właściwość
locked
zostaje automatycznie ustawiona na
true
. Próba zmodyfikowania zablokowanego w ten sposób obiektu
ElementFormat
powoduje wygenerowanie błędu
IllegalOperationError
. Dobrą praktyką jest pełne zdefiniowanie takiego obiektu przed przypisaniem go do instancji klasy
TextElement
.
Chcąc zmodyfikować istniejącą instancję klasy
ElementFormat
, należy najpierw sprawdzić jej właściwość
locked
. Jeśli ma wartość
true
, należy za pomocą metody
clone()
utworzyć niezablokowaną kopię obiektu. Właściwości tego niezablokowanego obiektu można zmieniać, a obiekt można przypisywać do instancji klasy
TextElement
. Wszelkie nowe wiersze utworzone na podstawie tej instancji będą sformatowane zgodnie z nowymi właściwościami. Poprzednie wiersze utworzone na podstawie tego samego obiektu ze starym formatem pozostaną niezmienione.
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);
}
}
}
|
|
|