Объект
TextBlock
является основой для создания строк текста. Содержимое объекта
TextBlock
задается с помощью объекта
TextElement
. Объект
ElementFormat
обрабатывает форматирование текста. Класс ElementFormat определяет такие свойства, как выравнивание базовой линии, кернинг, трекинг, поворот текста, а также размер, цвет и регистр шрифта. Он также включает класс
FontDescription
, который подробно описывается в главе
Работа со шрифтами
.
Использование объекта ElementFormat
Конструктор объекта
ElementFormat
принимает любой из многочисленных дополнительных параметров, включая
FontDescription
. Эти свойства можно задать и за пределами конструктора. В следующем примере демонстрируются отношения различных объектов в ходе определения и отображения простой текстовой строки.
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
объекта
ElementFormat
задает цвет шрифта. Это значение является целым числом, представляющим RGB-компоненты цвета; например, 0xFF0000 для красного цвета, а 0x00FF00 — для зеленого. По умолчанию используется значение «черный» (0x000000).
Свойство
alpha
задает значение альфа-прозрачности для элемента (как для
TextElement
, так и для
GraphicElement
). Диапазон допустимых значений: от 0 (полностью прозрачный) до 1 (полностью непрозрачный, используется по умолчанию). Элементы, у которых свойство
alpha
имеет значение 0, являются невидимыми, но активными. Это значение умножается на унаследованные альфа-значения, в результате чего элемент становится более прозрачным.
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
Выравнивание и смещение базовой линии
Доминантная базовая линия определяется по шрифту и размеру самого крупного текста в строке. Эти значения можно переопределить, задав свойства
TextBlock.baselineFontDescription
и
TextBlock.baselineFontSize
. Доминантную базовую линию можно выровнять по одной из нескольких базовых линий текста. К таким базовым линиям относятся линии верхних и нижних выносных элементов или идеографические верхняя, центральная и нижняя линии.
-
A.
-
Линия верхних выносных элементов
-
Б.
-
Базовая линия
-
В.
-
Линия нижних выносных элементов
-
Г.
-
Высота х
В объекте
ElementFormat
базовую линию и характеристики выравнивания определяют три свойства. Свойство
alignmentBaseline
задает основную базовую линию объекта
TextElement
или
GraphicElement
. Это линия, к которой «привязывается» элемент. Именно по этой линии выравнивается доминантная базовая линия всего текста.
Свойство
dominantBaseline
определяет, какая из нескольких базовых линий элемента должна использоваться для определения вертикальной позиции элемента в строке. По умолчанию используется значение
TextBaseline.ROMAN
, но доминантной базовой линией можно также назначить линию
IDEOGRAPHIC_TOP
или
IDEOGRAPHIC_BOTTOM
.
Свойство
baselineShift
перемещает базовую линию на заданное число пикселов по оси Y. В стандартном тексте (без поворота) положительное значение перемещает базовую линию вниз, а отрицательное — вверх.
Типографский регистр
Свойство
TypographicCase
объекта
ElementFormat
указывает регистр текста, например верхний, нижний регистр или капитель.
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
Поворот текста
Блок текста или глифы в сегменте текста можно поворачивать с шагом 90°. Класс TextRotation определяет следующие константы для настройки поворота текстового блока или глифа:
Константа
|
Значение
|
Описание
|
AUTO
|
auto
|
Задает поворот на 90 градусов против часовой стрелки. Обычно используется с вертикальным восточным текстом для поворота отдельных глифов.
|
ROTATE_0
|
rotate_0
|
Задает отсутствие поворота.
|
ROTATE_180
|
rotate_180
|
Задает поворот на 180 градусов.
|
ROTATE_270
|
rotate_270
|
Задает поворот на 270 градусов.
|
ROTATE_90
|
rotate_90
|
Задает поворот на 90 градусов по часовой стрелке.
|
Для поворота строк в текстовом блоке необходимо установить свойство
TextBlock.lineRotation
перед вызовом метода
TextBlock.createTextLine()
для создания строки текста.
Для поворота глифов в блоке или сегменте текста требуется установить свойство
ElementFormat.textRotation
на требуемое число градусов для поворота глифов. Глиф — это фигура, образующая символ, или часть символа, состоящего из нескольких глифов. Например, глифами являются буква «a» и точка над символом «i».
Поворот глифов применяется в некоторых восточных языках, в которых требуется сделать горизонтальные строки вертикальными, не поворачивая символы в строках. Дополнительные сведения о повороте восточного текста см. в разделе
Выравнивание восточно-азиатского текста
.
Ниже приводится пример поворота блока текста и содержащихся в нем глифов для восточных языков. В примере также используется японский шрифт.
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);
}
}
}
Блокировка и клонирование ElementFormat
При назначении объекта
ElementFormat
любому типу
ContentElement
его свойство
locked
автоматически получает значение
true
. При попытке изменить заблокированный объект
ElementFormat
возвращается ошибка
IllegalOperationError
. Лучше всего дать полное определение такому объекту, прежде чем назначать его экземпляру
TextElement
.
Если требуется изменить существующий экземпляр
ElementFormat
, сначала нужно проверить значение свойства
locked
. Если оно имеет значение
true
, используйте метод
clone()
для создания незаблокированной копии объекта. Свойства такого незаблокированного объекта можно изменить, и после этого назначить его экземпляру
TextElement
. Новые строки, созданные из этого объекта, будут иметь новое форматирование. Предыдущие строки, созданные из этого же объекта с использованием старого формата, остаются без изменений.
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);
}
}
}
|
|
|