Самый простой способ, который я знаю, - это взять текст и использовать последовательность регулярных выражений для встраивания 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 [email protected] 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).
Надеюсь это поможет!
Джастин
person
Justin N
schedule
04.01.2011