TextField が思いのほか細長くなったら

スクリプトで生成したダイナミックテキストフィールドが、

textfield

みたいな「縦細TextField」になった時に疑うポイント。

通常、流し込むテキスト内容に応じて TextField の高さを可変させる時は:

_myTF = new TextField();
_myTF.width = 300;
_myTF.autoSize = "left";
_myTF.multiline = _myTF.wordWrap = true;

みたいなことをするけれど、3行目に:

_myTF = new TextField();
_myTF.width = 300;
_myTF.autoSize = "left";
_myTF.x = 5;
_myTF.multiline = _myTF.wordWrap = true;

と追加してみると、幅300が反映されずに「縦細テキストフィールド」になった。この辺の順番並び替えをいろいろやってみると:

  • autoSize→width→xの順だとNG
  • autoSize→x→widthの順だとOK
  • width→autoSize→xの順だとNG
  • width→x→autoSizeの順だとOK
  • x→autoSize→widthの順だとOK
  • x→width→autoSizeの順だとOK

どうもx→widthの順に設定しておかないといけないのかと思いきや、
width→autoSize→multiline&wordWrap→xの順だとOK
だったりして、これはなんとも結論しがたいけれど、とにかく、

textfield

みたいなことになったら、上の項目の順番を疑えばいいかもという未確認メモ。

このエントリーをはてなブックマークに追加
はてなブックマーク - TextField が思いのほか細長くなったら

Comments:4

Aquioux 09-04-14 (火) 20:47

なぜ座標の指定であるところの x の指定がテキストフィールド形状崩壊のトリガーになるのかは分かりませんが、期待どおりの動きにならない理由は何となく想像がつきます。

autoSize と width を同時に指定しているからではないでしょうか。

width は setter として使用した場合はテキストフィールドの幅を固定するプロパティですよね。
一方 autoSize は TextField#text で指定された文字列の量によって、テキストフィールドの幅・高さを自動的に拡大・縮小するプロパティです。

autoSize は変動、width は固定。
本来、このふたつは共存できないプロパティなんじゃないかと思います。
おそらく sutoSize と height も同様になるんじゃないでしょうか。

tera 09-04-14 (火) 22:27

コメントありがとうございます!
widthとautoSize両指定って駄目なんでしょうか。
幅300固定で折り返して高さ可変、ってやつをやりたくて上のように設定して、まぁ多少のクセはあるもののそれなりに動いているのですが、これがAS3の仕様的には共存できないとなると、「幅固定&&高さ可変」ってASで実現する方法ってあったでしょうか?なんかよく見る表現だとは思うのですけれど。。

Aquioux 09-04-15 (水) 23:24

ライブヘルプの TextField#autoSize を改めて読んでみたら、以下のように書いてありました。

http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/text/TextField.html#autoSize

(要約)
autoSize を TextFieldAutoSize.LEFT に設定すると、
1. テキストフィールドの右側が伸縮。
2. テキストに改行が含まれる場合、下側も伸縮。
3. wordWrap = true に設定した場合、下側だけが伸縮し、右側は固定。

ということは、 wordWrap = true も併せて指定すれば、autoSize と width は共存可能のようです。
すいません、いい加減なこと書いて。

となると座標指定でテキストフィールドの形状がおかしくなるのはバグなんでしょうか。

現実的な解決方法としては、座標指定は切り離して、TextField を DisplayObjectContainer に addChild して、TextField ではなく Container の方で座標指定をおこなう、という風にせざるを得ないのかなぁ。

tera 09-04-16 (木) 1:29

いつもご丁寧にフォローいただきまことにありがとうございます。
先日もフォローいただいたcrossdomain.xmlのポリシーファイルの件も、あとで調べようと思いつつもそのままになってしまっている残念な僕ですが、なんとか時間を作ってどうにかしようと(実際しないといけないし)思いますので、今後ともどうぞよろしくお願い致します。

Comment Form
Remember personal info

Return to page top