2009-12-18 4 views
0

J'essaie de définir la largeur d'un objet Textfield() en fonction de son contenu de chaîne que j'ai défini - Y a-t-il un moyen de le définir de manière dynamique une fois que la chaîne a été envoyé à l'objet?Comment définir automatiquement la largeur de TextField()

J'ai:

var t1:TextField = new TextField() 
t1.x = stage.stageWidth/2; 
t1.y = stage.stageHeight/2;   
t1.text = "some string that i would want to render";    
t1.textColor = 0x000000; 
t1.cacheAsBitmap = true; 
addChild(t1); 

Merci pour toutes suggestions ... JML

Répondre

3

TextField.autoSize?

modifier:

Vous devriez lire correctement la documentation, il est une variable membre qui doit effectivement être mis. Je vais vous donner un exemple rapide sur la façon dont cela fonctionne:

var tf:TextField = new TextField(); 
tf.text  = 'Some text.'; 
tf.autoSize = TextFieldAutoSize.LEFT; 
tf.x = (stage.stageWidth - tf.width)/2; 
tf.y = (stage.stageHeight - tf.height)/2; 

Sinon, vous pouvez également aligner le champ de texte d'abord et utiliser TextFieldAutoSize.CENTER pour le maintenir aligné au centre.

+0

doux. merci pour cette réponse. Je ne l'ai pas vu dans les options de saisie semi-automatique. – jml

+0

Comment ai-je raté ça ... c'est comme la 5ème propriété dans les docs en direct – invertedSpear

+0

hm; En fait, ça ne ressemble pas à ça ... je posterai mon code dans une autre réponse. – jml

0

vous pouvez essayer d'utiliser la méthode getCharBoundaries() (elle retourne un rectangle entourant un personnage à un index spécifié). Utilisez cela pour obtenir le rectangle du premier et du dernier caractère et réglez la largeur sur la différence de ces rectangles.

Assez compliqué, il doit y avoir un meilleur moyen, mais sinon, cela devrait fonctionner.

+0

oh génial! non; Cela ne me dérange pas du tout ... Je pense que la règle générale qui travaille avec flex et flash est que vous devez accepter la nature compliquée de celui-ci. :) – jml

+0

hm; Pouvez-vous donner un exemple? voici ce que j'essaie: \t \t \t t1.x = stage.stageWidth/2; \t \t \t t1.y = stage.stageHeight/2; Var st1: String = "une chaîne que je voudrais rendre"; \t \t \t var; \t \t \t t1.text = st1; \t \t \t t1.width = t1.getCharBoundaries (st1.length) [1]; \t \t \t t1.textColor = 0x000000; \t \t \t t1.cacheAsBitmap = true; \t \t \t addChild (t1); – jml

1
t1.text = "Some text"; 
t1.width = t1.textWidth + 5; 
t1.height = t1.textHeight + 5; 

Pourquoi le + 5? Parce qu'Adobe aspire et ajoute une gouttière interne autour de vos affaires. Par les docs, cela est supposé être de 2px par côté, mais c'est en fait un peu plus, donc vous ajoutez un autre +1 pour faire bonne mesure.

+0

je dois admettre que la chose textwidth fonctionne très bien et vous n'avez pas à ajouter une autre importation. – jml

Questions connexes