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