Форматирование текстаFlash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий Объект 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. Доминантную базовую линию можно выровнять по одной из нескольких базовых линий текста. К таким базовым линиям относятся линии верхних и нижних выносных элементов или идеографические верхняя, центральная и нижняя линии. ![]()
В объекте 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 определяет следующие константы для настройки поворота текстового блока или глифа:
Для поворота строк в текстовом блоке необходимо установить свойство 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);
}
}
}
|
|