Formatowanie tekstuFlash 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 ElementFormatKonstruktor 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) czcionkiWł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 bazowejCzcionka 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. ![]()
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ść literWł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 tekstuBlok 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:
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 ElementFormatGdy 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);
}
}
}
|
|