2011-12-09 7 views
11

Próbuję wyrównać pionowy tekst w Monoline TextField w AS3. Nie jestem pewien, czy można to zrobić za pomocą TextFormat, ale nie sądzę.Jak wyrównać w pionie TextField w AS3

Poszukałem rozwiązania, ale nic naprawdę nie pomoże. Każda pomoc jest mile widziana.

Dzięki!

Odpowiedz

16

Nie można automatycznie wyrównywać tekstu w pionie. Musisz zrobić to sam.

Oto mój kod roboczych:

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

Czy nie przesuwasz pola tekstowego i nie przenosisz również tekstu? – felwithe

6

Jeśli jesteś w stanie użyć fl.text.TLFTextField zamiast flash.text.TextField (dostępny od Flash 10+), można pionowo wyśrodkować tekst, korzystając z właściwości verticalAlign:

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

mogę zapewnić, że „walkietokyo” odpowiedź jest prawdziwa odpowiedź, ale powinien on być stosowany we właściwy sposób zapoznać się z dokumentacją adobe „(adopts default value if undefined during cascade)” innymi słowy niektóre właściwości TLFTextFild m ay kaskada verticalAlign properety jak textFormat, więc umieść właściwość verticalAlign po każdym przypadku kaskadowania pozostałych, a następnie będzie działać. działa ze mną :)

1

Działa to doskonale tylko w przypadku, gdy tekst jest w jednym wierszu.

Najpierw należy dodać początkowy wiersz przerwania w każdym tekście. Zrobiłem to w nowym komponencie rozszerzającym TextField i nadpisując funkcję "text", dodając początkowy znak linii przerywania.

Następnie należy zastosować format do tekstu, a następnie użyć "wiodącej" właściwości, która reprezentuje wielkość pionowej przestrzeni między wierszami.

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

Mam nadzieję, że pomoże to komuś, kto potrzebuje pionowego wyrównania w jednym wierszu tekstu przy użyciu TextField. :-)