Formatowanie tekstu

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.

Tekst z widoczną linią wydłużenia górnego, linią bazową, linią wydłużenia dolnego i wysokością x
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); 
        } 
    } 
}