Самый простой способ, который я знаю, это взять текст и использовать последовательность регулярных выражений для встраивания HTML.Затем создайте TextFlow из HTML и назначьте его RichEditableText (или любому другому компоненту, который вы используете).Что-то вроде:
var emailRE:RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var smileyRE:RegExp = /:\)/g;
var sample:String = "Email john@doe.com with smiley :) example.";
var result:String = '';
while (emailRE.test(sample)) {
result = sample.replace(emailRE, "<a href='event:emailClicked'><font color='0x0000DD'>$&</font></a>");
}
if (result.length > 0) {
sample = result;
}
var result2:String = '';
while (smileyRE.test(sample)) {
result2 = sample.replace(smileyRE, "<img src='smiley.png'/>");
}
if (result2.length > 0) {
sample = result2;
}
richEditableTextComponent.textFlow = TextConverter.importToFlow(sample, TextConverter.TEXT_FIELD_HTML_FORMAT);
richEditableTextComponent.textFlow.addEventListener("emailClicked", emailClickedHandler, false, 0, true);
Тогда обработчик кликов будет выглядеть примерно так:
private function emailClickedHandler(event:FlowElementMouseEvent):void {
var emailAddress:String = LinkElement(event.flowElement).getFirstLeaf().text;
// do something with emailAddress
}
Вы также можете вручную построить TextFlow на основе строки, проанализировав строку для сообщений электронной почты / смайликов ипостроение SpanElement, LinkElement и InlineGraphicElement, это гораздо более обременительно для программиста, хотя, однако, я видел в этом необходимость (особенно в RichEditableText и необходимости анализировать каждый SpanElement, поскольку пользователь вводит ключ, чтобы увидеть, совпадают ли смайлики и заменяются ли онис графикой; использование HTML здесь не поможет, потому что вы не захотите переназначать весь объект TextFlow, поскольку это приведет к полной перерисовке всего потока, а не только к обновлению того, что должно быть обновлено, например, к одному SpanElement, получающему разделениев последовательность SpanElement - InlineGraphicElement - SpanElement).
Надеюсь, это поможет!
Джастин