Как установить правильную ширину динамического UITextField перед назначением текста? - PullRequest
3 голосов
/ 17 февраля 2009

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

// 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;

Ответы [ 2 ]

4 голосов
/ 18 февраля 2009

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

uiTextField.autoSize = TextFieldAutoSize.LEFT;

???

0 голосов
/ 18 февраля 2009

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

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