J'ai joué avec différentes méthodes pour déterminer au moment de l'exécution la largeur d'un "label" de sorte que je puisse redimensionner le "label" parce que je ne veux pas qu'il soit tronqué. J'ai finalement trouvé une solution facile à travers UITextField qui me permet de définir le .autoSize ce qui est génial! Cependant, maintenant j'essaie de "style" (simplement ajuster la police et la taille de la police) du UITextField mais il semble que je doive le faire manuellement avec '.htmlText' (que je vais accepter avec plaisir si cela C'est le seul moyen).Styling UITextField
J'utilise le .text pour définir la valeur de l'étiquette.
Mon cas de test implique un HBox (J'utilise en fait une grille, mais ils devraient être les mêmes et je l'ai fait tester à la fois):
- style I le HBox et la le style se poursuit jusqu'au UITextField. Je ne crois pas que cela fonctionnera pour moi parce que j'ai d'autres composants à l'intérieur que j'ai besoin de style différemment.
- J'ai essayé. UITextFormat et TextFormat (je vois que le .htmlText mise à jour en conséquence, mais la sortie ne met pas à jour alors j'ai remarqué que chaque fois que j'ai appelé hbox.addChild (myUITextField) il emporterait la .htmlText
- J'ai essayé définir le style avec myUITextField.setStyle (« fontSize », 20) avant et/ou après l'appel à addChild ni qui a eu un impact sur la afficher selon ce que j'ai noté ci-dessus
Des modifications sont en cours mais elles semblent être annulées lorsque je l'ajoute à l'affichage.
Alors, que dois-je faire pour le style de la UITextField en dehors de la mise manuellement avec mes contenus dans .htmlText? Les solutions qui n'utilisent pas UITextField fonctionnent correctement tant qu'il existe un moyen simple de ne pas tronquer le texte.
EDIT: Je veux juste faire textField.setStyle ('fontSize', 20) et s'attendre à ce que chaque fois que je change le texte, je n'aurais pas besoin d'utiliser HTML pour l'accompagner (donc je peux juste faire textField .text = 'quelque chose d'autre' et s'attendre à ce qu'il aura toujours une taille de police de 20). C'est ce que je voulais dire en n'utilisant pas .htmlText (désolé si je n'étais pas clair avant).
2ème ÉDITION: Je suppose que je devrais présenter le problème entier et peut-être que cela clarifiera ce que j'ai fait mal ou n'a pas pu réaliser.
Mon intention est d'avoir une grille et d'y ajouter du texte. Je ne veux pas le faire envelopper ou faire défiler alors je l'ajoute à la ligne suivante dans la grille lorsque la largeur totale des enfants de la ligne courante dépasse un certain nombre. Pour l'ajouter à la ligne suivante, je dois pouvoir calculer la largeur du texte.Je voudrais être capable de styliser ce texte individuellement en fonction des cas et il pourrait y avoir d'autres composants (comme un TextInput). Essentiellement, ce que j'essaie d'accomplir, c'est «Remplissez le vide».
J'ai inclus le code pour montrer ce que je fais actuellement et cela fonctionne un peu. Cela pourrait ne pas être lié à la question originale du style, mais je ne peux pas comprendre comment ajuster la distance entre chaque UITextField, mais à part cela, cela correspond à ce que je voudrais accomplir. Relevant de la question est la suivante: je voudrais changer le style I façon dont chaque UITextField (réglage actuellement .htmlText) en quelque chose un peu simple mais comme je l'ai je l'ai déjà mentionné serai heureux d'accepter l'aide .htmlText si c'est le seule solution.
J'ai donc une grille avec x lignes et dans chaque rangée, j'ai exactement un GridItem. Basé sur l'entrée, j'ajoute UITextField et TextInput dans le GridItem passant au GridItem suivant si nécessaire. Si vous avez une meilleure façon de le faire, alors ce serait mieux, mais je suppose que ce que je veux vraiment, c'est trouver un style différent.
Aussi un autre problème, je ne suis pas sûr de la façon exacte d'ajouter un TextField dans l'affichage. J'ai essayé:
var t : TextField = new TextField();
t.text = "I'm a TextField";
hBox.addChild(t); // doesn't work
//this.addChild(t); // doesn't work either
Mais je reçois l'erreur suivante:
TypeError: Erreur # 1034: Type Coercion a échoué: ne peut pas convertir flash.text :: TextField @ 172c8f9 à mx.core.IUIComponent.
Voici ce que j'ai qui fonctionne.
private function styleQuestionString(str : String) : String {
return '<FONT leading="1" face="verdana" size="20">' + str + '</FONT>';
}
private function loadQuestion(str : String) : void {
/* Split the string */
var tmp : Array = str.split("_");
/* Track the current width of the GridItem */
var curWidth : int = 0;
/* Display components that we will add */
var txtField : UITextField = null;
var txtInput : TextInput = null;
/* Track the current GridItem */
var curGridItem : GridItem = null;
/* Track the GridItem we can use */
var gridItemAC : ArrayCollection = new ArrayCollection();
var i : int = 0;
/* Grab the first GridItem from each GridRow of Grid */
var tmpChildArray : Array = questionGrid.getChildren();
for (i = 0; i < tmpChildArray.length; i++) {
gridItemAC.addItem((tmpChildArray[i] as GridRow).getChildAt(0));
}
curGridItem = gridItemAC[0];
gridItemAC.removeItemAt(0);
/* Used to set the tab index of the TextInput */
var txtInputCounter : int = 1;
var txtFieldFormat : UITextFormat = new UITextFormat(this.systemManager);
txtFieldFormat.leading = "1";
//var txtFieldFormat : TextFormat = new TextFormat();
//txtFieldFormat.size = 20;
/* Proper Order
txtField = new UITextField();
txtField.text = tmp[curItem];
txtField.autoSize = TextFieldAutoSize.LEFT;
txtField.setTextFormat(txtFieldFormat);
*/
var txtLineMetrics : TextLineMetrics = null;
var tmpArray : Array = null;
curGridItem.setStyle("leading", "1");
var displayObj : DisplayObject = null;
for (var curItem : int= 0; curItem < tmp.length; curItem++) {
/* Using UITextField because it can be auto-sized! */
/** CORRECT BLOCK (ver 1)
txtField = new UITextField();
txtField.text = tmp[curItem];
txtField.autoSize = TextFieldAutoSize.LEFT;
txtField.setTextFormat(txtFieldFormat);
***/
tmpArray = (tmp[curItem] as String).split(" ");
for (i = 0; i < tmpArray.length; i++) {
if (tmpArray[i] as String != "") {
txtField = new UITextField();
txtField.htmlText = styleQuestionString(tmpArray[i] as String);
//txtField.setTextFormat(txtFieldFormat); // No impact on output
txtLineMetrics = curGridItem.measureHTMLText(txtField.htmlText);
curWidth += txtLineMetrics.width + 2;
if (curWidth >= 670) {
curGridItem = gridItemAC[0];
curGridItem.setStyle("leading", "1");
if (gridItemAC.length != 1) {
gridItemAC.removeItemAt(0);
}
// TODO Configure the proper gap distance
curWidth = txtLineMetrics.width + 2;
}
displayObj = curGridItem.addChild(txtField);
}
}
//txtField.setColor(0xFF0000); // WORKS
if (curItem != tmp.length - 1) {
txtInput = new TextInput();
txtInput.tabIndex = txtInputCounter;
txtInput.setStyle("fontSize", 12);
txtInputCounter++;
txtInput.setStyle("textAlign", "center");
txtInput.width = TEXT_INPUT_WIDTH;
curWidth += TEXT_INPUT_WIDTH;
if (curWidth >= 670) {
curGridItem = gridItemAC[0];
if (gridItemAC.length != 1) {
gridItemAC.removeItemAt(0);
}
// TODO Decide if we need to add a buffer
curWidth = TEXT_INPUT_WIDTH + 2;
}
curGridItem.addChild(txtInput);
txtInputAC.addItem(txtInput);
/* Adds event listener so that we can perform dragging into the TextInput */
txtInput.addEventListener(DragEvent.DRAG_ENTER, dragEnterHandler);
txtInput.addEventListener(DragEvent.DRAG_DROP, dragDropHandler);
txtInput.addEventListener(DragEvent.DRAG_EXIT, dragExitHandler);
}
/* Add event so that this label can be dragged */
//txtField.addEventListener(MouseEvent.MOUSE_MOVE, dragThisLabel(event, txtField.text));
}
}
J'ÉDITÉE en fonction de vos commentaires, cela devrait vous aider :) –