2011-02-10 6 views
5

AS3のテキストフィールドの背景を描画しようとしています。AS3のTextFieldAutoSizeとtextWidth

フォントが埋め込まれていて、autoSize = TextFieldAutoSize.LEFTを使用しているTextFieldがあります。 TextFieldにテキストを割り当て、次にTextFieldのtextWidthを使用してroundedRectを描画しようとします。テキストフィールドの幅は、実際のテキストの幅より常に小さくなります。

実際のテキスト幅を取得する別の方法はありますか?私はいくつかの簡単なgoogle検索したが、私は何も見つかりませんでした。

コード:

var tfProgramName:TextField = TextUtil.createTextField(true,"Arial",20,true); 
tfProgramName.width = 100; 
tfProgramName.autoSize = TextFieldAutoSize.LEFT; 
tfProgramName.x = 5; 
tfProgramName.y = 5; 
addChild(tfProgramName); 

tfProgramName.text = _program.title; 
background.graphics.clear(); 
background.graphics.beginFill(0xFF0000,0.75); 
background.graphics.drawRoundRect(0,0,tfProgramName.textWidth+10,this.height+10,5,5); 
background.graphics.endFill(); 

textWidth私の場合は、373のようなものであるが、それは間違いなく近いのですが、考慮に入れ、フォントやフォントサイズを取るようには見えない400に近づくべきです。

+1

コードを投稿できますか?どこが間違っているのかを見分けるのは難しいです。 –

+0

申し訳ありませんが、答えはありません。テキストの幅に関係する問題はありません。親MovieClipは縮小されていましたが、フォントが実際に埋め込まれていないため、背景は縮小されていましたが、テキストは縮小されていました。だから私は正しい幅を見つけることができないと思った。埋め込み問題とスケーリングの問題を解決したら、すべて正常に機能しました。 –

答えて

0

TextFieldのgetCharBoundaries()またはgetCharIndexAtPoint()の戻り値を使用してください。 TextFieldのtextWidthプロパティは、常に2〜3ピクセルずれているようです.より小さいの幅がテキストの実際の幅よりも小さくなります。 LineMetricsも役立つかもしれませんが、私自身はそれを使用していません。

1

私はそれがより良いとは約束することはできませんが、TextLineMetricsをご覧ください。これは他の何よりも多くの情報を提供します。

+0

これは、私にfield.textWidthと同じ番号を与えることになります – Matt

0

TextFieldクラスは.widthだけでなく、実際のTextWidthを返す.textWidthも持っています。

var lineMetrics : TextLineMetrics = textField.getLineMetrics(0); 
var startX : Number = lineMetrics.x; 

と幅のどちらかになります:

lineMetrics.width; 
のTextFieldの出発点を得るために、あなたはまた、タイラーが書いたと同じように、あなたがのTextLineMetricsを得ることができ、開始x位置を必要とします

または

textField.textWidth;