Formattazione del testo

Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive

Un oggetto TextBlock è una factory per la creazione di righe di testo. Il contenuto di un oggetto TextBlock viene assegnato mediante l'oggetto TextElement . La formattazione del testo viene gestita da un oggetto ElementFormat . La classe ElementFormat definisce le proprietà quali allineamento rispetto alla linea di base, crenatura, avvicinamento, rotazione del testo e dimensioni, colore e maiuscole/minuscole del testo. Comprende inoltre un elemento FontDescription , illustrato dettagliatamente in Operazioni con i caratteri .

Uso dell'oggetto ElementFormat

La funzione di costruzione per l'oggetto ElementFormat può contenere uno o più parametri opzionali tra i molti disponibili, compreso FontDescription . È possibile impostare queste proprietà al di fuori della funzione di costruzione. L'esempio seguente illustra la relazione dei vari oggetti nella definizione e nella visualizzazione di una semplice riga di testo:

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); 
        } 
    } 
}

Colore carattere e trasparenza (alfa)

La proprietà color dell'oggetto ElementFormat permette di impostare il colore del carattere. Il valore è un numero intero che rappresenta i componenti RGB del colore; ad esempio, 0xFF0000 per il rosso e 0x00FF00 per il verde. Il valore predefinito corrisponde al nero (0x000000).

La proprietà alpha permette di impostare il valore della trasparenza alfa di un elemento (sia TextElement sia GraphicElement ). I valori possono essere compresi tra 0 (completamente trasparente) e 1 (completamente opaco, valore predefinito). Gli elementi ai quali è assegnato un valore alpha pari a 0 sono invisibili, ma restano comunque attivi. Questo valore viene moltiplicato da eventuali valori alpha ereditati, rendendo l'elemento più trasparente.

var ef:ElementFormat = new ElementFormat(); 
ef.alpha = 0.8; 
ef.color = 0x999999; 

Allineamento e spostamento linea di base

Il carattere e le dimensioni del testo più grande di una riga determinano la linea di base dominante della riga. È possibile ignorare questi valori impostando TextBlock.baselineFontDescription e TextBlock.baselineFontSize . È anche possibile allineare la linea di base dominante a una delle diverse linee di base del testo. Esse comprendono la linea misura ascendente e la linea misura discendente o la parte ideografica superiore, centrale o inferiore.

Testo che mostra linea ascendente, linea di base, linea discendente e altezza x
A.
Ascendente

B.
Linea di base

C.
Discendente

D.
Altezza x

Nell'oggetto ElementFormat , le caratteristiche della linea di base e dell'allineamento sono determinate da tre proprietà. La proprietà alignmentBaseline imposta la linea di base principale di un TextElement o di un GraphicElement . Questa diventa la linea di riferimento per l'elemento; la linea di base dominante dell'intero testo viene allineata a questa posizione.

La proprietà dominantBaseline specifica quale delle diverse linee di base dell'elemento utilizzare; queste informazioni determinano la posizione verticale dell'elemento sulla linea. Il valore predefinito è TextBaseline.ROMAN , ma può essere impostato anche in modo da rendere dominanti le linee di base IDEOGRAPHIC_TOP o IDEOGRAPHIC_BOTTOM .

La proprietà baselineShift permette di spostare la linea di base di un determinato numero di pixel sull'asse y. Nel testo normale (non ruotato), un valore positivo permette di spostare la linea di base verso il basso, mentre un valore negativo permette di spostarla verso l'alto.

Maiuscole/minuscole

La proprietà TypographicCase di ElementFormat permette di specificare le seguenti caratteristiche maiuscolo, minuscolo e maiuscoletto.

 
var ef_Upper:ElementFormat = new ElementFormat(); 
ef_Upper.typographicCase = TypographicCase.UPPERCASE; 
 
var ef_SmallCaps:ElementFormat = new ElementFormat(); 
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; 

Rotazione del testo

È possibile ruotare un blocco di testo o i glifi di un segmento di testo a incrementi di 90°. La classe TextRotation definisce le seguenti costanti per la definizione della rotazione dei blocchi di testo e dei glifi:

Costante

Valore

Descrizione

AUTO

“auto”

Specifica una rotazione di 90 gradi in senso antiorario. Viene solitamente utilizzata nel testo asiatico per ruotare soltanto i glifi che necessitano rotazione.

ROTATE_0

“rotate_0”

Specifica l'assenza di rotazione.

ROTATE_180

“rotate_180”

Specifica una rotazione di 180 gradi.

ROTATE_270

“rotate_270”

Specifica una rotazione di 270 gradi.

ROTATE_90

“rotate_90”

Specifica una rotazione di 90 gradi in senso orario.

Per ruotare le righe di un blocco di testo, impostare la proprietà TextBlock.lineRotation prima di chiamare il metodo TextBlock.createTextLine() per la creazione della linea di testo.

Per ruotare i glifi all'interno di un blocco di testo o segmento, impostare la proprietà ElementFormat.textRotation sul numero di gradi per i quali si desidera ruotare i glifi. Un glifo è la forma che costituisce un carattere, o la parte di un carattere costituita da più glifi. La lettera “a” e il puntino su una “i”, ad esempio, sono glifi.

La rotazione dei glifi è importante in alcune lingue asiatiche, nelle quali può essere necessario ruotare le righe orientandole verticalmente, senza però ruotare i caratteri all'interno delle righe. Per informazioni sulla rotazione del testo asiatico, consultate Testo asiatico giustificato .

Di seguito è riportato un esempio di rotazione sia di un blocco di testo che dei glifi che si trovano all'interno di esso, come avviene per il testo asiatico. Nell'esempio viene anche utilizzato un carattere giapponese:

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); 
        } 
    } 
}

Blocco e clonazione di ElementFormat

Quando un oggetto ElementFormat è assegnato a un qualsiasi tipo di ContentElement , la proprietà locked dell'oggetto viene automaticamente impostata su true . Il tentativo di modifica di un oggetto ElementFormat bloccato causa un errore di tipo IllegalOperationError . È consigliabile definire completamente un oggetto di questo tipo prima di assegnarlo a un'istanza TextElement .

Per modificare un'istanza ElementFormat esistente, verificarne prima la proprietà locked . Se la proprietà è true , utilizzare il metodo clone() per creare una copia sbloccata dell'oggetto. Le proprietà di questo oggetto sbloccato possono essere modificate; l'oggetto può quindi essere assegnato all'istanza TextElement . Alle nuove linee create a partire dall'oggetto viene applicata la nuova formattazione. Le linee create precedentemente da questo stesso oggetto, che utilizzano il formato precedente, rimangono invariate.

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); 
        } 
    } 
}