2011-12-09 13 views
11

Sto cercando di allineare verticalmente un testo in un campo di testo Monoline in AS3. Non sono sicuro se questo può essere fatto con TextFormat, ma non penso.Come allineare verticalmente un campo di testo in AS3

Ho cercato una soluzione ma niente di veramente utile. Qualsiasi aiuto è benvenuto.

Grazie!

risposta

16

Non è possibile allineare automaticamente il testo. Devi farlo da solo.

Ecco il mio codice di lavoro:

public static function verticalAlignTextField(tf: TextField): void { 
    tf.y += Math.round((tf.height - tf.textHeight)/2); 
} 
+1

Non spostando il campo di testo si sposta anche il testo? – felwithe

6

Se si è in grado di utilizzare una fl.text.TLFTextField al posto di un flash.text.TextField (disponibile da Flash Player 10+), è possibile centrare verticalmente il testo utilizzando la proprietà verticalAlign:

import flashx.textLayout.formats.VerticalAlign; 
[...] 
myTextField.verticalAlign = VerticalAlign.MIDDLE; 
1

posso assicurare che "walkietokyo" risposta è la vera risposta, ma dovrebbe essere usato in modo corretto consultare la documentazione di Adobe "(adopts default value if undefined during cascade)" in altre parole alcune proprietà del TLFTextFild m ay cascade verticalAlign properety come textFormat, quindi metti la proprietà verticalAlign dopo ogni cosa per mettere in cascata gli altri, quindi funzionerà. funziona con me :)

1

Questo funziona perfettamente solo nel caso in cui il testo sia in linea singola.

Per prima cosa è necessario aggiungere una riga di interruzione iniziale in ogni testo. L'ho fatto in un nuovo componente che estende TextField e sovrascrive la funzione "testo", aggiungendo il carattere di interruzione iniziale.

import flash.text.TextField; 

public class MyTextField extends TextField 
{ 
    public function MyTextField() 
    { 
     super(); 
    } 

    public override function set text(value:String):void 
    { 
     value = "\n" + value; 

     super.text = value; 
    } 
} 

allora avete bisogno di applicare in formato al testo, un uso del "leader" proprietà che rappresenta la quantità di spazio verticale tra le righe.

myTextFormat = new TextFormat(); 

// This is the existent horizontal align 
myTextFormat.align = TextFormatAlign.CENTER; 

// This is my simulated vertical align. Remember that the first character 
// is always a break line. In most cases it will be a negative value... 
myTextFormat.leading = -22; 

var myTextField:MyTextField = new MyTextField(); 
myTextField.text = "Hello"; 
myTextField.setTextFormat(myTextFormat); 

Spero che questo possa aiutare qualcuno che ha bisogno di allineamento verticale nel testo a riga singola utilizzando TextField. :-)

Problemi correlati