Formato de texto

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

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.

Texto que muestra la lí­nea ascendente, lí­nea de base, lí­nea descendente y altura x
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); 
        } 
    } 
}