A
TextBlock
es la base para crear líneas de texto. El contenido de
TextBlock
se asigna a través del objeto
TextElement
. Un objeto
ElementFormat
controla el formato del texto. La clase ElementFormat define propiedades como la alineación de la línea de base, el ajuste y espaciado entre caracteres, la rotación de texto y el tamaño, el color y el formato de mayúsculas de la fuente. También incluye un elemento
FontDescription
, que se analiza detalladamente en
Trabajo con fuentes
.
Uso del objeto ElementFormat
El constructor del objeto
ElementFormat
adopta cualquiera de una larga lista de parámetros opcionales, incluido el parámetro
FontDescription
. Estas propiedades también se pueden establecer fuera del constructor. El ejemplo siguiente indica la relación de los distintos objetos en la definición y visualización de una línea de texto sencillo:
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);
}
}
}
Color de fuente y transparencia (alfa)
La propiedad
color
del objeto
ElementFormat
define el color de la fuente. El valor es un entero que representa los componentes RGB del color; por ejemplo, 0xFF0000 para el rojo y 0x00FF00 para el verde. El valor predeterminado es el negro (0x000000).
La propiedad
alpha
define el valor de transparencia alfa de un elemento (
TextElement
y
GraphicElement
). Los valores se encuentran entre 0 (totalmente transparente) y 1 (completamente opaco, que es el valor predeterminado). Los elementos con un valor
alpha
de 0 son invisibles, pero siguen estando activos. Este valor se multiplica por los valores de alpha heredados, haciendo de este modo que el elemento sea más transparente.
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
Alineación y desplazamiento de la línea de base
La fuente y el tamaño del texto más grande de una línea determinan su línea de base dominante. Estos valores se pueden reemplazar definiendo las propiedades
TextBlock.baselineFontDescription
y
TextBlock.baselineFontSize
. La línea de base dominante se puede alinear con una de las diversas líneas de base del texto. Entre ellas se encuentran la línea ascendente y la línea descendente, o la línea superior, central o inferior de los pictogramas.
-
A.
-
Ascendente
-
B.
-
Línea de base
-
C.
-
Descendente
-
D.
-
Altura x
En el objeto
ElementFormat
las características de línea de base y alineación se definen mediante tres propiedades. La propiedad
alignmentBaseline
establece la línea de base principal de un objeto
TextElement
o
GraphicElement
. Esta línea de base es la línea "de ajuste" para el elemento y respecto a su posición se alinea la línea de base dominante de todo el texto.
La propiedad
dominantBaseline
especifica cuál de las distintas líneas de base del elemento se debe usar, lo que determina la posición vertical del elemento en la línea. El valor predeterminado es
TextBaseline.ROMAN
, pero también se pueden establecer como dominantes las líneas de base
IDEOGRAPHIC_TOP
o
IDEOGRAPHIC_BOTTOM
.
La propiedad
baselineShift
desplaza la línea de base un número determinado de píxeles a lo largo del eje y. En el caso de texto normal (no rotado), un valor positivo desplaza la línea de base hacia abajo, mientras que un valor negativo lo hace hacia arriba.
Formato tipográfico de mayúsculas y minúsculas
La propiedad
TypographicCase
de
ElementFormat
especifica el uso de mayúsculas, minúsculas o versalitas del texto.
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
Rotación del texto
Los bloques de texto o los pictogramas incluidos en un segmento de texto se pueden rotar en incrementos de 90 grados°. La clase TextRotation define las constantes siguientes para establecer la rotación de los bloques de texto y los pictogramas:
Constante
|
Valor
|
Descripción
|
AUTO
|
“auto”
|
Especifica una rotación de 90 grados en sentido contrario a las agujas del reloj. Se utiliza normalmente con textos asiáticos, para rotar únicamente los pictogramas que necesitan rotarse.
|
ROTATE_0
|
“rotate_0”
|
No especifica ninguna rotación.
|
ROTATE_180
|
“rotate_180”
|
Especifica una rotación de 180 grados.
|
ROTATE_270
|
“rotate_270”
|
Especifica una rotación de 270 grados.
|
ROTATE_90
|
“rotate_90”
|
Especifica una rotación de 90 grados en sentido horario.
|
Para rotar las líneas de texto de un bloque de texto, establezca la propiedad
TextBlock.lineRotation
antes de llamar al método
TextBlock.createTextLine()
para crear la línea de texto.
Para rotar los pictogramas incluidos en un bloque de texto o un segmento, establezca la propiedad
ElementFormat.textRotation
en el número de grados que desea girar los pictogramas. Un pictograma es la forma que constituye un carácter o una parte de un carácter que consta de varios pictogramas. Por ejemplo, la letra a y el punto de la i son pictogramas.
Rotar pictogramas es relevante en algunos idiomas asiáticos en los que puede ser necesario rotar las líneas hasta el sentido vertical, pero no los caracteres incluidos en las líneas. Para obtener información sobre la rotación de texto en idiomas asiáticos, consulte
Justificación de texto asiático
.
A continuación se muestra un ejemplo de rotación tanto de un bloque de texto como de los pictogramas que incluye, tal y como se llevará a cabo con textos asiáticos. El ejemplo también utiliza una fuente japonesa:
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);
}
}
}
Bloqueo y clonación de ElementFormat
Si un objeto
ElementFormat
se asigna a cualquier tipo de elemento
ContentElement
, su propiedad
locked
se establece automáticamente en el valor
true
. Si se intenta modificar un objeto
ElementFormat
bloqueado, se genera un error de tipo
IllegalOperationError
. La práctica más recomendable consiste en definir completamente un objeto así antes de asignarlo a una instancia de
TextElement
.
Si desea modificar una instancia existente de
ElementFormat
, compruebe antes su propiedad
locked
. Si es
true
, utilice el método
clone()
para crear una copia no bloqueada del objeto. Las propiedades de este objeto desbloqueado se pueden cambiar y, posteriormente, asignarlo a la instancia de
TextElement
. Las nuevas líneas que se creen a partir de él tendrán el nuevo formato. Las líneas anteriores creadas a partir de este mismo objeto y con el formato antiguo no se modifican.
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);
}
}
}
|
|
|