Le texte multiligne dans Flex ne recalcule pas lorsque le css d'exécution est modifié

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

  •  10-07-2019
  •  | 
  •  

Question

Pour des raisons de temps de chargement, j'utilise un fichier CSS d'exécution dans mon application Flex.

Je rencontre un problème avec un contrôle de texte multiligne:

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

Lorsque ma feuille de style CSS a été chargée, le style de texte change correctement, mais la hauteur n'est pas recalculée. Il semble s’agir d’un simple champ de ligne.

FYI: le contrôle n'est pas réellement visible et est déclenché par un basculement. Donc, je ne me soucie pas vraiment si la feuille de style n'a pas été chargée et qu'ils obtiennent du texte système standard. Je veux juste que ce soit à la bonne hauteur quand il a été chargé.

Était-ce utile?

La solution

Pour tous ceux qui ont ce problème, la solution que j'ai trouvée consistait à créer un composant personnalisé prolongeant le fichier mx.controls.Text

.

puis substituez la méthode styleChange () et appelez explicitement la méthode invalidateDisplayList () pour le champ de texte une fois le style appliqué.

Il devrait être appelé automatiquement lorsque le style est modifié, mais non ... pour une raison quelconque dans flex 3.5, ce n'est pas le cas.

public class TextObject étend Text {// ... redéfinit la fonction publique styleChanged (styleProp: String): void {invalidateDisplayList (); } }

J'espère que cela sauvera quelqu'un tout le temps que j'ai perdu dessus.

Autres conseils

Selon la documentation d'Adobe pour Text

  

Dimensionnement d'un contrôle de texte

     

Flex mesure la   Contrôle du texte comme suit:

     

Si vous spécifiez une valeur de pixel pour les deux   les propriétés de hauteur et de largeur, toute   texte dépassant la taille du   le contrôle est coupé à la frontière.

     

Si vous spécifiez un pixel explicite   largeur, mais pas de hauteur, Flex enveloppe la   texte pour adapter la largeur et calcule   la hauteur pour s'adapter au nombre requis   de lignes.

     

Si vous spécifiez une valeur en pourcentage   largeur et pas de hauteur, Flex ne le fait pas   envelopper le texte, et la hauteur est égale   le nombre de lignes déterminé par   le nombre de caractères de retour.

     

Si vous ne spécifiez qu'une hauteur et non   largeur, la valeur de hauteur ne   affecter le calcul de la largeur, et Flex   dimensionne le contrôle à la largeur de   la ligne maximale.

     

En règle générale, si vous avez longtemps   texte, vous devez spécifier un pixel   propriété width. Si le texte pouvait   changer et vous voulez vous assurer que le   Le contrôle de texte prend toujours le même   espace dans votre application, définissez   propriétés explicites de hauteur et de largeur   qui correspondent au plus grand texte attendu.

Le truc que j’ai utilisé pour résoudre ce problème consiste à faire en sorte que le texte obtienne sa largeur via une expression de liaison, quel que soit le conteneur qui limite sa largeur, généralement le parent immédiat.

par exemple

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

Pourriez-vous utiliser une largeur de pixel fixe au lieu de 100%? J'ai eu des problèmes avec 100% ayant été mal calculés sur des contrôles de texte dynamiques auparavant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top