Formatieren von Text
Flash Player 10 und höher, Adobe AIR 1.5 und höher
Das
TextBlock
-Objekt ist eine Factory zum Erstellen von Textzeilen. Der Inhalt eines
TextBlock
-Objekts wird mithilfe des
TextElement
-Objekts zugewiesen. Das
ElementFormat
-Objekt legt die Formatierung des Textes fest. Die ElementFormat-Klasse definiert Eigenschaften wie die Ausrichtung der Grundlinie, Kerning, Laufweite, Textdrehung sowie Schriftgröße, Schriftfarbe und Groß-/Kleinschreibung. Er enthält außerdem ein
FontDescription
, welches detailliert unter
Arbeiten mit Schriftarten
beschrieben wird.
Verwenden des ElementFormat-Objekts
Der Konstruktor für das
ElementFormat
-Objekt lässt eine große Anzahl optionaler Parameter zu, unter anderem eine
FontDescription
. Sie können diese Eigenschaften auch außerhalb des Konstruktors festlegen. Im folgenden Beispiel wird die Beziehung zwischen den verschiedenen Objekten beim Definieren und Anzeigen einer einfachen Textzeile dargestellt:
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);
}
}
}
Schriftfarbe und Transparenz (Alpha)
Die Eigenschaft
color
des
ElementFormat
-Objekts legt die Schriftfarbe fest. Der Wert ist eine Ganzzahl, die die RGB-Komponenten der Farbe angibt, z. B. 0xFF0000 für Rot und 0x00FF00 für Grün. Der Standardwert ist Schwarz (0x000000).
Die Eigenschaft
alpha
legt den Wert für die Alphatransparenz eines Elements (
TextElement
und
GraphicElement
) fest. Die möglichen Werte reichen von 0 (vollständig transparent) bis 1 (vollständig deckend, Standardwert). Elemente mit einem
alpha
-Wert von 0 sind zwar nicht sichtbar, jedoch trotzdem aktiv. Dieser Wert wird mit beliebigen übernommenen Alphawerten multipliziert, wodurch das Element transparenter dargestellt wird.
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
Grundlinienausrichtung und -verschiebung
Die dominierende Grundlinie wird durch die Schriftart und -größe des größten Textes in einer Zeile bestimmt. Sie können diese Werte überschreiben, indem Sie
TextBlock.baselineFontDescription
und
TextBlock.baselineFontSize
festlegen. Die dominierende Grundlinie kann an einer der anderen Grundlinien innerhalb des Textes ausgerichtet werden. Zu diesen Grundlinien zählen die Oberlängen- und die Unterlängenlinie sowie die Oberseite, die Mitte oder die Unterseite von Ideogrammen.
-
A.
-
Oberlänge
-
B.
-
Grundlinie
-
C.
-
Unterlänge
-
D.
-
x-Höhe
Im Objekt
ElementFormat
werden die Merkmale der Grundlinie und Ausrichtung durch drei Eigenschaften bestimmt. Die Eigenschaft
alignmentBaseline
legt die Hauptgrundlinie eines
TextElement
oder
GraphicElement
fest. Diese Grundlinie ist die „Ausrichtungslinie“ für das Element, d. h. an dieser Position wird die dominierende Grundlinie des gesamten Textes ausgerichtet.
Die Eigenschaft
dominantBaseline
gibt an, welche der Grundlinien des Elements, durch die die vertikale Position des Elements auf der Linie bestimmt wird, zu verwenden ist. Der Standardwert ist
TextBaseline.ROMAN
, es kann jedoch auch die
IDEOGRAPHIC_TOP
- oder
IDEOGRAPHIC_BOTTOM
-Grundlinie als dominierende Grundlinie festgelegt werden.
Die Eigenschaft
baselineShift
verschiebt die Grundlinie um eine festgelegte Anzahl von Pixeln auf der y-Achse. In normalem Text (ohne Drehung) wird die Grundlinie bei einem positiven Wert nach unten und bei einem negativen Wert nach oben verschoben.
Typografische Groß-/Kleinschreibung
Die Eigenschaft
TypographicCase
eines
ElementFormat
-Objekts gibt die Groß-/Kleinschreibung von Text an, z. B. Großbuchstaben, Kleinbuchstaben oder Kapitälchen.
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
Drehen von Text
Sie können einen Textblock oder die Zeichen (Glyphen) innerhalb eines Textsegments in Schritten von 90 Grad drehen. Die TextRotation-Klasse definiert die folgenden Konstanten, um die Drehung von Textblöcken und Zeichen festzulegen:
Konstante
|
Wert
|
Beschreibung
|
AUTO
|
„auto“
|
Gibt eine Drehung um 90 Grad gegen den Uhrzeigersinn an. Sie wird zumeist bei vertikalem asiatischem Text verwendet, um nur die erforderlichen Zeichen zu drehen.
|
ROTATE_0
|
„rotate_0“
|
Gibt keine Drehung an.
|
ROTATE_180
|
„rotate_180“
|
Gibt eine Drehung um 180 Grad an.
|
ROTATE_270
|
„rotate_270“
|
Gibt eine Drehung um 270 Grad an.
|
ROTATE_90
|
„rotate_90“
|
Gibt eine Drehung um 90 Grad im Uhrzeigersinn an.
|
Legen Sie zum Drehen der Textzeilen in einem Textblock die Eigenschaft
TextBlock.lineRotation
fest, bevor Sie die
TextBlock.createTextLine()
-Methode aufrufen, um die Textzeile zu erstellen.
Um die Zeichen (Glyphen) innerhalb eines Textblocks oder -segments zu drehen, legen Sie für die Eigenschaft
ElementFormat.textRotation
die Gradzahl fest, um die die Zeichen gedreht werden sollen. Als Glyphe wird die Form eines Zeichens oder eines Teils des Zeichens, das aus mehreren Glyphen besteht, bezeichnet. Der Buchstabe „a“ und der Punkt auf dem „i“ sind beispielsweise Glyphen.
Das Drehen von Glyphen ist vor allem in asiatischen Sprachen wichtig, um die Zeilen in eine vertikale Ausrichtung zu bringen, ohne die Zeichen innerhalb der Zeilen zu drehen. Weitere Informationen zum Drehen von asiatischem Text finden Sie unter
Ausrichten von asiatischem Text
.
Im folgenden Beispiel wird das Drehen eines Textblocks und der darin enthaltenen Zeichen veranschaulicht, wie z. B. bei asiatischem Text. Zudem wird in diesem Beispiel eine japanische Schriftart verwendet:
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);
}
}
}
Sperren und Klonen des ElementFormat-Objekts
Wenn ein
ElementFormat
-Objekt einem beliebigen
ContentElement
-Typ zugewiesen ist, wird die Eigenschaft
locked
des Objekts automatisch auf
true
festgelegt. Wenn Sie versuchen, ein gesperrtes
ElementFormat
-Objekt zu bearbeiten, wird eine
IllegalOperationError
-Ausnahme ausgelöst. Die beste Vorgehensweise ist, ein solches Objekt vollständig zu definieren, bevor Sie es einer
TextElement
-Instanz zuweisen.
Wenn Sie eine vorhandene
ElementFormat
-Instanz ändern möchten, müssen Sie zunächst deren
locked
-Eigenschaft überprüfen. Wenn der Wert
true
lautet, können Sie mit der
clone()
-Methode eine ungesperrte Kopie des Objekts erstellen. Die Eigenschaften dieses ungesperrten Objekts können geändert werden, und anschließend kann des Objekt mit der
TextElement
-Instanz verknüpft werden. Alle aus dem Objekt neu erstellten Zeilen weisen die neue Formatierung auf. Zuvor von diesem Objekt erstellte Zeilen, die das alte Format verwenden, bleiben unverändert.
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);
}
}
}
|
|
|
|
|