2012-04-17 10 views
0

私は画面に合わせて幅を動的に調整するテキストフィールドを持っています。テキストが切り詰められ、「...」が付いていない場合は、そのテキストを切り捨てて追加します。しかし、テキストの値が使用可能なテキストフィールドの幅よりも長いかどうかはどのように分かりますか?AS3テキストフィールド、切り捨て

答えて

2

yourTextField.textWidthには、TextFieldのテキストの長さが表示されます。 TextFieldのautosizeプロパティを最初に設定して、実際にTextFieldの幅ではなくテキストの幅を取得するようにしてください。

1

おそらく唯一の方法は、textWidthが幅よりも長い場合、一度に文字を追加または削除し、省略記号を追加して文字が閉じるまで幅をチェックすることですテキストフィールド全体を埋めます。

+0

もし私が100個のテキストフィールドのリストの上にこれをループしているなら、深刻なオーバーヘッドを加えることができますか? mmm – woodscreative

+0

はい、それ以外の方法はありますか?最小と最大の文字数を設定することができます。バッファの上または下にある場合は、それが始まり、いくつかのループを保存します。 – Daniel

1

私は文字列をtextFieldに残して新しいMCに余分な "..."を追加し、その視認性をfalseに設定する方法について考えました。 textField.textWidth> = textField.widthにすると、 "..." MCが表示され、textFieldの最後に配置されます。これは、textFieldの内部または外部にある可能性があります。

2

私は、resizeイベントは、次のように私は少しループを実行するサイズを変更する必要がTextFieldオブジェクトをもたらしたことがトリガされた時はいつでも私がやったことだった、これと同じ機能を必要:

tfMessage.text = message; 

if(tfMessage.width > maximumWidth) 
{ 
    tfMessage.appendText("..."); 

    while(tfMessage.width > maximumWidth) 
    { 
     tfMessage.text = tfMessage.text.substr(0, -4) + "..."; 
    } 
} 

TextFieldていることを確認しますオブジェクトのautoSizeプロパティをTextFieldAutoSize.LEFTに設定すると、テキストを更新するたびにオブジェクトのサイズが自動的に変更されます。 TextFieldAutoSize列挙の他の値を使用することはできますが、LEFTは私にとって最適です。使用例:

tfMessage.autoSize = TextFieldAutoSize.LEFT; 

恐ろしいかもしれませんが、最高のクリーンなオプションです。さらに、これを使用して、平均的なコンピュータで何百というTextFieldオブジェクトを細かくしてもパフォーマンスは低下しません。彼らはAVM2の調整と最適化で大丈夫でした。

とにかく私はこれが助けてくれることを願っています。あなたのプロジェクトに幸運。

+0

これはかなり冗長です – mika

+0

これは去年の4月でした。あなたの答えに誇り、間違いなく最高の提案されたソリューション! – xLite

9

ねえ何シンプルな:-)を行くのは

while (textfield.numLines > MAX) 
    textfield.text = textfield.text.slice(0, -4) + "..."; 

お楽しみください!

+0

OPは、高さではなく幅を切り捨てることについて尋ねました... –

+0

OPはMAXに1を設定することができます – mika

+0

ループ内に幅のチェックがないので、テキストを全く切り捨てません。あなたのループを実行する前にwordWrap/multilineの両方をtrueに設定していない限り...はい、それは扱いがうまくいくでしょう:-) –

関連する問題