El texto de varias líneas en Flex no se recalcula cuando se cambia el tiempo de ejecución css

StackOverflow https://stackoverflow.com/questions/310729

  •  10-07-2019
  •  | 
  •  

Pregunta

Por consideraciones de tiempo de carga, estoy usando un archivo css en tiempo de ejecución en mi aplicación Flex.

Tengo un problema con un control de texto de varias líneas:

<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>

Cuando mi hoja de estilo CSS se ha cargado, el estilo de texto cambia correctamente, pero la altura no se vuelve a calcular. Parece ser solo un campo de una sola línea.

FYI: El control no es realmente visible y se activa por un rollover. Por lo tanto, no me importa si la hoja de estilo no se ha cargado y obtienen el texto estándar del sistema. Solo quiero que tenga la altura correcta cuando se haya cargado.

¿Fue útil?

Solución

Para cualquier otra persona que tenga este problema, la solución que encontré fue crear un componente personalizado que extendiera el mx.controls.Text

y luego anula el método styleChange (), y llama explícitamente al método invalidateDisplayList () para el campo de texto una vez que se ha aplicado el estilo.

Debe llamarse automáticamente cuando se cambia el estilo, pero no ... por alguna razón en flex 3.5 no lo es.

public class TextObject extiende Text {// ... anular la función pública styleChanged (styleProp: String): void {invalidateDisplayList (); } }

Espero que salve a alguien todo el tiempo que perdí en él.

Otros consejos

Según la documentación de Adobe para texto

  

Dimensionar un control de texto

     

Flex dimensiona el   Control de texto de la siguiente manera:

     

Si especifica un valor de píxel para ambos   las propiedades de alto y ancho, cualquiera   texto que excede el tamaño de la   el control se recorta en el borde.

     

Si especifica un píxel explícito   ancho, pero sin altura, Flex envuelve el   texto para ajustarse al ancho y calcula   la altura para ajustarse al número requerido   de líneas.

     

Si especifica un porcentaje basado   ancho y sin altura, Flex no   ajusta el texto, y la altura es igual   el número de líneas según lo determinado por   el número de caracteres de retorno.

     

Si especifica solo una altura y no   ancho, el valor de la altura no   afectar el cálculo de ancho y Flex   dimensiona el control para que se ajuste al ancho de   la línea máxima.

     

Como regla general, si tiene mucho tiempo   texto, debe especificar un píxel basado   Ancho de propiedad. Si el texto pudiera   cambiar y desea asegurarse de que el   El control de texto siempre toma lo mismo   espacio en su aplicación, establecer   propiedades explícitas de altura y anchura   que se ajustan al texto esperado más grande.

Entonces, el truco que he usado para tratar esto es hacer que el Texto obtenga su ancho a través de una expresión de enlace desde cualquier contenedor que limite su ancho, generalmente el padre inmediato.

por ejemplo

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>

¿Podría usar un ancho de píxel fijo en lugar de 100%? He tenido problemas con el 100% calculado incorrectamente en los controles de texto dinámico antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top