حساب عرض النص في ActionScript و Flex




flash actionscript-3 (6)

إليك طريقة تعمل أيضًا:

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

أحاول حساب كيفية WIDE لجعل الزر الخاص بي ، استنادًا إلى النص الذي سيحتويه ، وعندما أحاول استخدام google للتعرف على كيفية تبسيط شيء ما على أنه سطحي مثل WIDTH OF SOME TEXT ، فإنني أذهب عبر محاولتي فقط واد من خلال الفضولي على وجه الدهاء باطني مكافحة الفودو بديهية. هل يمكن لأي شخص في الخارج أن يساعدني في تبسيط طريقة كتابة وظيفة مثل هذه:

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

شكرا مقدما.


بعد متابعة تعليقي على إجابة quoo ، إليك الكود لنفس الغرض ، ولكن فقط قم بإخراج العرض من TextField ، باستخدام TextLineMetrics أيضًا:

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

طالما كنت في UIComponent ، يمكنك استخدام الدالة measureText .

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

ومع ذلك ، يجب أن يتناسب حجم عنصر المرن تلقائيًا مع عرض النص ، إذا لم تقم بتعيين عرض عليه. بهذه الطريقة إذا كنت بحاجة إلى عرض النص ، يمكنك فقط الاتصال باستخدام خاصية textWidth.


كما أفكر ، البناء textField.textWidth يعمل بشكل جيد ... حتى تقوم بتغيير حجم الخط. يبدو أنه يحسب العرض على أساس الخط 12px. لذا ، إذا كان لديك خط مدمج وتصميم عالمي ، فيمكنك تجربة حل سريع:

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

لقد حاولت هذا على سلاسل طويلة وقصيرة وكانت النتيجة صحيحة.



Here's طريقة القيام بذلك في Spark:

لقد قمت بتعديل - مبسّط - مثاله هنا قليلاً:

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