flex actionscript-3 actionscript flex3

flex - ¿Cómo se configura el ancho adecuado de un UITextField dinámico antes de asignar texto?



actionscript-3 actionscript (2)

En Flex 3.2, estoy creando un UITextField, y luego estoy midiendo el texto que voy a asignar a la propiedad de texto de ese campo. Luego uso esas métricas para establecer el tamaño del campo. Sin embargo, el ancho calculado no es lo suficientemente ancho para acomodar el texto. ¿Hay un orden diferente para lograr una medición adecuada o estoy viendo un problema con la función measureText ()? ¿Cómo puedo obtener resultados precisos?

// UITextField''s default size appears to be 100x100 // Measure the text then set width and height var tf:UITextFormat = uiTextField.getUITextFormat(); var tlm:TextLineMetrics = tf.measureText(this.labelText); // Text within the field is clipped unless ''padding'' is added to the size // Flex Documentation specifies there is a 2 px gutter on each side, so // the expected padding would be 4 px. However, clipping occurs, for // "Hello, World" up to 9 px. uiTextField.width = tlm.width + 9; uiTextField.height = tlm.height + 4; uiTextField.border = true; uiTextField.name = "uiTextField"; uiTextField.text = this.labelText;


He tenido todo tipo de problemas con la medición del ancho y la altura de textFields antes. Parece que solo quieres autoescribir el campo de texto. Has probado:

uiTextField.autoSize = TextFieldAutoSize.LEFT;

???


Desafortunadamente, Flex a menudo se confunde mucho cuando intenta obtener un textWidth dinámicamente. Peor aún, es difícil detectar el error de manera confiable y hacer que Flex se actualice correctamente. Las mejores opciones que he encontrado:

  1. Hackelo manualmente, mayormente confiable y tiene la ventaja de que sucederá antes de que todo haya terminado de renderizarse: mx.controls.Text hackear AS3 describe una forma de hacerlo.
  2. Use callLater o un detector de eventos FlexEvent.CREATION_COMPLETE; esto es menos confiable, pero definitivamente no es un hack
  3. Use setTimeout con un retraso de menos de 1/10 por segundo (me gustan 25-50 milisegundos). He encontrado que este es el más confiable, pero puede causar un pequeño "blip" en la pantalla (generalmente no es demasiado notable para abreviar) código).