2009-02-17 1 views
3

В Flex 3.2 я создаю UITextField, а затем измеряю текст, который я собираюсь присвоить текстовому свойству этого поля. Затем я использую эти метрики для установки размера поля. Однако расчетная ширина недостаточно широка для размещения текста. Есть ли другой порядок для достижения правильного измерения или я вижу проблему с функцией measureText()? Как я могу получить точные результаты?Как вы устанавливаете правильную ширину динамического UITextField перед назначением текста?

// UITextField's default size appears to be 100x100 
// Measure the text then set width and height 
var tf:UITextFormat = uiTextField.getUITextFormat(); 
var tlm:TextLineMetrics = tf.measureText(this.labelText); 

// Text within the field is clipped unless 'padding' is added to the size 
// Flex Documentation specifies there is a 2 px gutter on each side, so 
// the expected padding would be 4 px. However, clipping occurs, for 
// "Hello, World" up to 9 px. 
uiTextField.width = tlm.width + 9; 
uiTextField.height = tlm.height + 4; 
uiTextField.border = true; 
uiTextField.name = "uiTextField";    
uiTextField.text = this.labelText; 

ответ

4

У меня были всевозможные проблемы с измерением ширины и высоты текстовых полей. Похоже, вы просто хотите автоматизировать textField. Вы пробовали:

uiTextField.autoSize = TextFieldAutoSize.LEFT; 

???

+0

Спасибо, что останавливает отсечение без необходимости в некоторых измерениях, и позже я смогу использовать ширину uiTextField для рисования и размещения графики соответствующим образом. Я оставлю этот вопрос без ответа, потому что неточная точность от мерыText() все еще беспокоит меня. – 2009-02-17 21:58:53

0

К сожалению, Flex часто сбивается с толку, когда он пытается динамически получить textWidth. Хуже того, трудно надежно уловить ошибку и правильно обновить Flex. Лучшие варианты я нашел:

  1. Hack вручную - в основном надежен и имеет преимущество происходит, прежде чем все закончил рендеринга: mx.controls.Text hack AS3 описывает способ сделать это.
  2. Использование callLater или слушатель событий FlexEvent.CREATION_COMPLETE - это менее надежный, но это, безусловно, не хак
  3. Использование SetTimeout с задержкой менее чем 1/10 секунды (мне нравится 25-50 миллисекунды). Я нашел это наиболее надежным, но может вызвать небольшой «промах» на экране (как правило, не очень заметно для короткого кода).