2011-02-10 13 views
5

Sto provando a disegnare uno sfondo in un campo di testo in AS3.TextFieldAutoSize e textWidth in AS3

Ho un campo di testo con un carattere incorporato e utilizzo di autoSize = TextFieldAutoSize.LEFT. Assegno il testo al campo di testo, quindi chiama try per disegnare un arrotondatoRect usando textWidth del campo di testo. La larghezza del campo di testo è sempre inferiore alla larghezza effettiva del testo.

C'è un altro modo per ottenere l'effettiva larghezza del testo? Ho fatto qualche ricerca su google veloce ma non ho trovato nulla.

Codice:

var tfProgramName:TextField = TextUtil.createTextField(true,"Arial",20,true); 
tfProgramName.width = 100; 
tfProgramName.autoSize = TextFieldAutoSize.LEFT; 
tfProgramName.x = 5; 
tfProgramName.y = 5; 
addChild(tfProgramName); 

tfProgramName.text = _program.title; 
background.graphics.clear(); 
background.graphics.beginFill(0xFF0000,0.75); 
background.graphics.drawRoundRect(0,0,tfProgramName.textWidth+10,this.height+10,5,5); 
background.graphics.endFill(); 

textWidth nel mio caso è qualcosa come 373, ma dovrebbe essere più vicino a 400. E 'sicuramente vicino, ma non sembra prendere in considerazione la dimensione del carattere o un carattere.

+1

Puoi pubblicare un po 'di codice? È difficile capire dove sbagli esattamente. –

+0

Scusate ragazzi, non c'è risposta. Non c'è alcun problema legato alla larghezza del testo. Il filmato principale MovieClip era in fase di ridimensionamento, ma poiché il mio font non si stava effettivamente incorporando, stava ridimensionando il mio sfondo ma non il mio testo. Quindi ho pensato che non stava trovando la larghezza corretta. Una volta risolto il problema di embed e di ridimensionamento, tutto ha funzionato correttamente. –

risposta

0

Quello che potresti provare a fare è utilizzare i valori di ritorno di getCharBoundaries() o di getCharIndexAtPoint() di TextField. La proprietà textWidth del TextField sembra essere sempre sfasata di un paio di pixel - restituirà una certa larghezza più piccola di rispetto alla larghezza effettiva del testo. LineMetrics può anche aiutare, non l'ho usato io stesso però.

1

Non posso promettere che andrà meglio, ma date un'occhiata a TextLineMetrics Ti dà più informazioni di ogni altra cosa, quindi questa è probabilmente la soluzione migliore.

+0

Questo finisce per darmi lo stesso numero di field.textWidth – Matt

0

La classe Campo di testo non ha solo l'attributo .width, ma anche .textWidth, che restituirà il vero TextWidth. Al fine di ottenere il punto di partenza del TextField è inoltre necessario l'avvio x posizione, che si può ottenere con le TextLineMetrics, proprio come Tyler ha scritto:

var lineMetrics : TextLineMetrics = textField.getLineMetrics(0); 
var startX : Number = lineMetrics.x; 

e la larghezza dovrà essere:

lineMetrics.width; 

o

textField.textWidth;