web-dev-qa-db-ja.com

JavaScriptとFlexでのテキスト幅の計算

ボタンに含まれるテキストに基づいて、ボタンをWIDEで作成する方法を計算しようとしています。また、WIDTH OF SOME TEXTのように単純なものを計算する方法をグーグルで検索しようとすると、斜視になります。明らかに無意味な難解な直感に反するブードゥーを通り抜けます。誰かが私のためにこのような関数を書く方法を単純化するのを手伝ってくれるでしょうか:

public function HowWideWouldThisTextBeIfItWereInThisButton(Text:String,Container:Button):int {
 ...
}

前もって感謝します。

21
Joshua

UIComponentを使用している限り、 measureText 関数を使用できます。

public function howWideWouldThisTextBeIfItWereInThisButton(text:String,container:Button):int {
   var lineMetrics:TextLineMetrics = container.measureText(text);
   return lineMetrics.width;      
}

そうは言っても、フレックスボタンコンポーネントは、幅を設定しない場合、テキストの幅に合わせて自動的にサイズ変更されます。そうすれば、テキストの幅が必要な場合は、textWidthプロパティを使用して呼び出すことができます。

21
quoo

これは、任意の形式、サイズ、フォントタイプで機能します。プロパティ「autoSize」と「wordWrap」を忘れないでください!

var tf:TextField = new TextField();
addChild(tf);
tf.autoSize = TextFieldAutoSize.LEFT;
tf.wordWrap = false;
tf.text = "Whatever here";
tf.width = tf.textWidth + 4; // add 2 pixels-gutters left & right

ボタンの幅は「tf.width」にする必要があります...

9
Simmoniz

ここに Sparkでそれを行う方法:

私はここで彼の例を少し修正しました-簡略化しました-:

var textMetrics:TextLineMetrics = label.measureText( label.text );  
var textWidth:int = textMetrics.width; 
2
Thomas Brady

これも機能する方法です:

var tempText:Text = new Text();
tempText.regenerateStyleCache(false);
var textWidth:int = tempText.measureText(*yourstring*).width;
1
Bly

私が思うに、textField.textWidth構築は正常に機能します...フォントサイズを変更するまで。 12pxフォントに基づいて幅を計算しているようです。したがって、埋め込みフォントとグローバルスタイルがある場合は、高速なソリューションを試すことができます。

var realWidth = myLabel.textField.textWidth * (fontSize / 12);

私はこれを長い文字列と短い文字列で試しましたが、結果は正しいです。

1
effrit

quooの回答に対する私のコメントのフォローアップ、これは同じ目的のコードですが、ただつかんでいます TextLineMetrics も使用して、TextFieldからの幅:

    public function mtxtWidth(container:TextField):int {
       var lineMetrics:TextLineMetrics = container.getLineMetrics(0);
       return lineMetrics.width;      
    }
0
cregox

ジョシュア、それは本当に明確にするのに役立ちます。 TextField、MX Label、Spark Label、RichTextなど)について話しているのですか?異なるテキストコンポーネントは、FTEやTLFなどの異なるテキストエンジンを使用し、異なるソリューションを持っている可能性があります。実際に実行する前に、コントロールにレンダリングされるフォントのサイズを予測できるユーティリティまたはサンプルコードのセット。ただし、古き良きTextFieldのように、場合によってはこれを予測できることもあります。 TextFieldを作成し、textFormatフィールド、自動サイズメソッド、およびテキストを設定するだけです。どこにでも追加する前に、サイズを取得できるはずです。順序は覚えていませんが、順序は覚えています。これらのプロパティを設定することが重要です。その方法がわからない場合は、コード例を提供できます。ここで、新しい「改善された」コンポーネントとして、Spark Labels-いまいましい方法を見つけることができれば、私は悩まされるでしょう...これに何時間も費やし、方法を見つけられませんでした..または方法を知っている誰か:P。

0
Cyrus Amiri