Flex — переключение полужирного текста в TextArea

Я делаю RTE во Flex и пытаюсь сделать кнопки форматирования текста.

<s:ToggleButton id="boldBtn" width="50" height="50" label="B" click="boldBtn_clickHandler(event)" color="#000000" fontWeight="bold"/>

и мой код

protected function boldBtn_clickHandler(event:MouseEvent):void
        {
            var txtLayFmt:TextLayoutFormat = mainTextField.getFormatOfRange(null,
                mainTextField.selectionAnchorPosition,
                mainTextField.selectionActivePosition);
            txtLayFmt.fontWeight = (txtLayFmt.fontWeight == FontWeight.BOLD) ? FontWeight.NORMAL : FontWeight.BOLD; **// Causing the NULL Pointer exception**
            mainTextField.setFormatOfRange(txtLayFmt,
                mainTextField.selectionAnchorPosition,
                mainTextField.selectionActivePosition);
            mainTextField.setFocus();
        }

Когда я набираю текст в TextArea и выбираю его, затем нажимаю жирный шрифт, я получаю сообщение «Не могу получить доступ к свойству или методу нулевой ссылки на объект». Если я закомментирую txtLayFmt.fontWeight = (txtLayFmt.fontWeight == FontWeight.BOLD)? FontWeight.NORMAL : FontWeight.BOLD; программа не падает, так что это кажется оскорбительной строкой, но я не понимаю, почему.

ИЗМЕНИТЬ Сейчас я пробую этот код. Он работает, когда я использую его в настольном приложении, но когда я помещаю его в мобильный проект, он не работает. Любые идеи?

......

private function btnBold_click(evt:MouseEvent):void {
trace("Clicked"); // Traces to output ok
var styleObj:TextLayoutFormat = new TextLayoutFormat();
styleObj.fontWeight = FontWeight.BOLD;
mainTextField.setFormatOfRange(styleObj);
}

Что не так с этим кодом?


person RapsFan1981    schedule 11.10.2011    source источник
comment
Вы получаете нулевую ошибку. Особо не вылетает, но значит что-то не так с вашим кодом. По всей вероятности, getFormatOfRange возвращает значение null.   -  person J_A_X    schedule 12.10.2011
comment
Я только что внес изменения, этот код выглядит нормально, но не работает   -  person RapsFan1981    schedule 12.10.2011
comment
Что вы имеете в виду под "выглядит нормально, а не работает"? Похоже, там нет нулевых проверок. Кроме того, что такое mainTextField? Где остальная часть вашего кода?   -  person J_A_X    schedule 13.10.2011
comment
Я думаю, что обнаружил проблему. Мобильные приложения не поддерживают TLF, поэтому код работает как настольное приложение, а не как мобильное. Есть ли способ сделать это без использования TextLayoutFormat?   -  person RapsFan1981    schedule 14.10.2011
comment
Э-э, я почти уверен, что мобильные приложения действительно обрабатывают TLF, потому что я сам использовал его.   -  person J_A_X    schedule 15.10.2011
comment
Нужно ли делать что-то особенное, чтобы использовать их?   -  person RapsFan1981    schedule 15.10.2011
comment
TLF в мобильном приложении Как правило, избегайте текстовых элементов управления, использующих Text Layout Framework (TLF) в мобильных приложениях. Мобильные темы оформления элементов управления TextArea и TextInput оптимизированы для мобильных приложений и не используют TLF, как их аналоги для настольных компьютеров. TLF используется в настольных приложениях для предоставления богатого набора элементов управления рендерингом текста. noreferrer">help.adobe.com/en_US/flex/mobileapps/   -  person RapsFan1981    schedule 15.10.2011


Ответы (1)


добавьте это в свой css, и он будет использовать TLF и поддерживать все обычные функции.

s|TextArea
{
    skinClass: ClassReference("spark.skins.spark.TextAreaSkin");
}
person JTtheGeek    schedule 12.08.2015