Formatera text

Flash Player 10 och senare, Adobe AIR 1.5 och senare

Ett TextBlock-objekt används när du vill skapa rader av text. Innehållet i ett TextBlock-objekt tilldelas via objektet TextElement. Ett ElementFormat-objekt hanterar textens formatering. Klassen ElementFormat definierar egenskaper som baslinjejustering, kerning, spårning, textrotation och teckensnittsstorlek, färg samt skiftläge. Den inkluderar även en FontDescription som behandlas utförligt i Arbeta med teckensnitt.

Använda objektet ElementFormat

Konstruktorn för objektet ElementFormat hanterar vilka som helst i en lång lista över alternativa parametrar, inklusive en FontDescription. Du kan även ange egenskaperna utanför konstruktorn. Exemplet nedan visar förhållandet mellan de olika objekten när en enkel textrad definieras och visas:

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); 
        } 
    } 
}

Teckenfärg och genomskinlighet (alfa)

Egenskapen color i objektet ElementFormat anger teckenfärgen. Värdet är ett heltal som representerar färgens RGB-komponenter, t.ex. 0xFF0000 för rött och 0x00FF00 för grönt. Standardvärdet är svart (0x000000).

Egenskapen alpha ställer in alfagenomskinlighetsvärdet för ett element (både TextElement och GraphicElement). Värdena kan gå från 0 (helt genomskinlig) till 1 (helt ogenomskinlig vilket är standardvärdet). Element med ett alfavärde på 0 är osynliga men fortfarande aktiva. Värdet multipliceras med eventuella ärvda alfavärden vilket gör elementet mer genomskinligt.

var ef:ElementFormat = new ElementFormat(); 
ef.alpha = 0.8; 
ef.color = 0x999999; 

Baslinjejustering och förskjutning

Teckensnittet och storleken på den största texten på en rad avgör den dominerande baslinjen. Du kan åsidosätta dessa värden genom att ställa in TextBlock.baselineFontDescription och TextBlock.baselineFontSize. Du kan justera den dominanta baslinjen med en av flera baslinjer i texten. Dessa baslinjer inkluderar uppstapeln och nedstapeln eller den ideografiska överdelen, mittdelen eller underdelen.

Text som visar uppstapel, baslinje, nedstapel och x-höjd
A.
Uppstapel

B.
Baslinje

C.
Nedstapel

D.
x-höjd

Tre egenskaper avgör egenskaperna för baslinjen och justeringen i objektet ElementFormat. Egenskapen alignmentBaseline ställer in huvudbaslinjen för ett TextElement eller GraphicElement. Baslinjen är ”fästlinjen” för elementet och det är efter det läget som den dominerande baslinjen för all text justeras.

Egenskapen dominantBaseline anger vilka av elementets olika baslinjer som ska användas och som anger den vertikala positionen för elementet på den raden. Standardvärdet är TextBaseline.ROMAN, men du kan även ange att baslinjen IDEOGRAPHIC_TOP eller IDEOGRAPHIC_BOTTOM ska vara dominerande.

Egenskapen baselineShift flyttar baslinjen med ett angivet antal pixlar längs y-axeln. Med normal (ej roterad) text flyttar ett positivt värde baslinjen nedåt och ett negativt värde flyttar den uppåt.

Typografiskt skiftläge

Egenskapen TypographicCase i ElementFormat anger textens skiftläge, t.ex. versaler, gemener eller kapitäler.

 
var ef_Upper:ElementFormat = new ElementFormat(); 
ef_Upper.typographicCase = TypographicCase.UPPERCASE; 
 
var ef_SmallCaps:ElementFormat = new ElementFormat(); 
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; 

Rotera text

Du kan rotera ett textblock eller glyferna i ett textsegment i steg om 90 grader. Klassen TextRotation definierar följande konstanter för inställning av både textblock och glyfernas rotering:

Konstant

Värde

Beskrivning

AUTO

”auto”

Anger 90 graders rotation moturs. Används i vanliga fall med vertikal asiatisk text för att enbart rotera glyfer som kräver rotering.

ROTATE_0

”rotate_0”

Anger ingen rotation.

ROTATE_180

”rotate_180”

Anger 180 graders rotering.

ROTATE_270

”rotate_270”

Anger 270 graders rotering.

ROTATE_90

”rotate_90”

Anger 90 graders rotation medurs.

Ställ in egenskapen TextBlock.lineRotation innan du anropar metoden TextBlock.createTextLine() för att skapa textraden om du vill rotera textrader i ett textblock.

När du vill rotera glyfer i ett textblock eller -segment ska du ställa in egenskapen ElementFormat.textRotation på det antal grader som du vill rotera glyferna. En glyf är den form som skapar ett tecken eller en del av ett tecken som består av flera glyfer. Bokstaven ”a” och pricken över ett ”i” är exempel på glyfer.

Roterade glyfer används för vissa asiatiska språk när du vill rotera linjer vertikalt men inte tecknen på raderna. Mer information om att rotera asiatisk text finns i Justera östasiatisk text.

Nedan finns ett exempel hur du roterar både ett textblock och glyferna i det så som du gör för asiatisk text. I exemplet används även ett japanskt teckensnitt:

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); 
        } 
    } 
}

Låsa och klona ElementFormat

När ett ElementFormat-objekt tilldelas en typ av ContentElement, ställs egenskapen locked automatiskt in på true. Om du försöker ändra ett låst ElementFormat-objekt, inträffar felet IllegalOperationError. Det bästa sättet är att helt definiera ett sådant objekt innan det tilldelas till en TextElement-instans.

Om du vill ändra en befintlig ElementFormat-instans kontrollerar du först egenskapen locked. Om egenskapen är true kan du skapa en olåst kopia av objektet med metoden clone(). Du kan ändra egenskaperna för det olåsta objektet och sedan tilldela det till TextElement-instansen. Eventuella nya rader som skapas kommer att ha den nya formateringen. Rader som skapats tidigare för samma objekt med den gamla formateringen ändras inte.

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); 
        } 
    } 
}