Je crée une application Adobe Flex et j'ai un contrôle Texte (mx: Texte), qui est censé être utilisé lorsque vous avez besoin d'un texte non modifiable multiligne (par opposition à une étiquette, qui est un texte non modifiable sur une seule ligne). Mon contrôle de texte ne s'emballe pas lorsque je redimensionne la fenêtre du navigateur pour être plus petit que le texte (ou le charge avec la fenêtre du navigateur déjà plus petite). En consultant this doc que j'ai trouvé, il semblerait que la fonctionnalité de retour à la ligne ne se produise que si vous spécifiez une largeur absolue en pixels. C'est exactement ce que j'essaie d'éviter. Je veux que le texte s'ajuste à l'intérieur de la taille donnée à mon objet Flash pour qu'il soit toujours visible ... y a-t-il un moyen de le faire, à travers une propriété qui me manque ou un contrôle différent? Merci.comment obtenir un contrôle de texte Flex à l'habillage de mots
Répondre
Vous pouvez essayer d'ajouter un gestionnaire d'événements au nœud parent pour Event.RESIZE
et appeler la méthode validateNow()
de l'objet Texte. (Peut-être précédé d'un appel invalidateSize()
.) Pourquoi cela n'arrive-t-il pas automatiquement? Je ne sais pas.
Les largeurs et les hauteurs de pourcentage se résolvent en réalité en leurs équivalents de pixels, donc en les utilisant, vous devriez atteindre l'encapsulage et le dimensionnement relatif que vous recherchez. Par exemple:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
<mx:Text width="100%" height="100%" text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
</mx:Application>
C'est, à condition qu'il ya un réglage de la largeur de toute nature, taille relative (un nombre explicite, un pourcentage, un point d'ancrage à base de contraintes - par exemple, en haut, à droite, en bas, à gauche - etc.) devrait faire envelopper le texte naturellement. Cette approche ne fonctionne-t-elle pas avec la mise en page que vous utilisez? Sans code, c'est difficile à dire, mais vous avez raison - l'encapsulation nécessite de définir une propriété liée à la largeur sur le conteneur.
Le redimensionnement et l'enrubannage peuvent être un peu compliqués, cependant, selon le contexte, donc si vous trouvez que cela ne fonctionne pas, essayez de poster du code - je suis sûr que l'un d'entre nous pourra vous aider à comprendre IT out.
J'ai eu le même problème. Dans mon cas, j'avais un mx: Bloc de texte (qui DEVRAIT avoir été enveloppé), et cet objet mx: Text a été intégré dans deux conteneurs mx: VBox.
La seule façon que je suis le texte pour envelopper était avec succès à faire les deux éléments suivants:
- mettre la propriété « width = « 100% » » dans chaque conteneur VBox (dans lequel le mx: texte résidait).
- mettre la 'width = "100%"' propriété dans chaque mx: objet Text (résidant dans cet emboîtement de VBox de)
Très non-intuitive, mais c'est ce qui a fonctionné pour moi.
J'espère que cela vous aide!
Jon Kinsting
Je pense que l'application largeur VBox = "100%" et le texte width = "100%" est le moyen le plus simple. Note: si le texte est généré dynamiquement, ne pas oublier de faire text.percentWidth = 100
L'exemple de Christian avec juste une application avec un élément Text à l'intérieur fonctionne, mais il est beaucoup trop facile de bousiller la mise en page. Il suffit d'ajouter un VBox inbetween et l'emballage ne pas travail:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
<mx:VBox width="100%">
<mx:Text width="100%" height="100%" text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />
</mx:VBox>
</mx:Application>
Strange .. Si vous supprimez la hauteur = "100%" du texte cela fonctionne ... – Tom
render="invalidateSize();validateNow();
'component id'.mx_internal::getTextField().wordWrap=true"
Ajouter à votre composant texte.
Si vous essayez d'obtenir l'enveloppe de texte pour travailler à l'intérieur d'un composant MXML essayez ceci:
<mx:Text id="testText"
width="{ this.width }"
height="100%"
text="Your text here" />
vous définissez essentiellement la largeur à la largeur du composant et réglage de la hauteur à 100% lui permettra d'envelopper correctement lorsque vous réduisez la taille.
Je pourrais le faire en utilisant seulement mxml. Le résultat est assez moche, mais je pourrais le faire.
<s:Group id="propDisplay" width="100%">
<mx:Text id="key" left="0" text="{data.key}:"/>
<mx:Text left="{key.width}" maxWidth="{propDisplay.width - key.width}"
text="{data.value}" />
</s:Group>
Essayez de définir htmlText = "true" dans votre champ de texte.
Aha. J'ai juste eu le même problème, qui a été résolu par la même chose - en définissant la largeur explicitement sur trois choses - la boîte extérieure, la boîte intérieure et l'objet Text. – user8032