2011-02-10 16 views
5

Estoy tratando de dibujar un fondo de un campo de texto en AS3.TextFieldAutoSize y textWidth en AS3

Tengo un TextField con una fuente incrustada y usando autoSize = TextFieldAutoSize.LEFT. Asigno el texto a TextField y luego intento dibujar un redondeado Rect usando el textWidth del TextField. El ancho del campo de texto siempre es más pequeño que el ancho del texto real.

¿Hay alguna otra manera de obtener el ancho de texto real? Hice algunas búsquedas rápidas en Google pero no encontré nada.

Código:

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 en mi caso es algo así como 373, pero debería estar más cerca de 400. Es, definitivamente, cerca, pero no parece tener en cuenta el tamaño de la fuente o tipo de letra.

+1

¿Se puede publicar algún código? Es difícil discernir exactamente dónde te estás equivocando. –

+0

Lo siento muchachos, no hay respuesta. No hay problema relacionado con el ancho del texto. El MovieClip principal se estaba reduciendo, pero como mi fuente no estaba incrustado en realidad, estaba reduciendo mi fondo, pero no mi texto. Entonces pensé que no estaba encontrando el ancho correcto. Una vez que resolví el problema de inserción y los problemas de escalado, todo funcionó correctamente. –

Respuesta

0

Lo que podría tratar de hacer es utilizar los valores de retorno de TextField's getCharBoundaries() o getCharIndexAtPoint(). La propiedad textWidth de TextField siempre parece estar desactivada por un par de píxeles: devolverá algo de ancho más pequeño que el ancho real de su texto. LineMetrics también puede ayudar, aunque yo no lo he usado.

1

No puedo prometer que va a ser mejor, pero échale un vistazo a TextLineMetrics Te da más información que cualquier otra cosa, así que esta es probablemente tu mejor opción.

+0

Esto termina dándome el mismo número que field.textWidth – Matt

0

La clase TextField no solo tiene el atributo .width, sino también .textWidth, que devolverá el valor real de TextWidth. Con el fin de conseguir el punto de partida del campo de texto también necesita la puesta x Posición, que se puede obtener con los TextLineMetrics, al igual que Tyler escribió:

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

y anchura será o bien:

lineMetrics.width; 

o

textField.textWidth;