RichEditableText 为低级的 UIComponent,用于显示、滚动、选择和编辑各种格式的文本。

富文本可以包含可单击的超链接以及可嵌入或从 URL 加载的内嵌图形。

RichEditableText 不包含滚动条,但是可以实现用于以编程方式滚动的 IViewport 接口,这样可以由确实能够提供滚动条的 Scroller 控制。它还支持使用鼠标滚轮垂直滚动。

它不包括用于更改文本格式的任何用户界面。但是,它提供了可以通过编程方式执行此操作的 API;例如,这些 API 可以创建使所选文本变成粗体的 Bold 按钮。

该类用于 Spark 版本的 TextInput 和 TextArea 的外观。(TextInput 不显示处理富文本的功能,但 TextArea 可以。)默认情况下,RichEditableText 具有透明背景,但不支持绘制边框。

RichEditableText 使用 Text Layout Framework (TLF) 库,而该库又基于 Flash Player 10 中的 Flash 文本引擎 (FTE) 新版本。组合后,可以在这些层上使用高质量的国际印刷效果和布局编辑文本。

Spark 体系结构提供三个文本“原型”- Label、RichText 和 RichEditableText。Label 运行速度最快且占用内存最少,因为它仅使用 FTE,没有 TLF,但其功能有限:无富文本、不可滚动、不可选择、不可编辑。RichText 新增了使用复杂布局显示富文本的功能,但仍然完全是非交互式的。RichEditableText 占用内存最多,但是提供 TLF 可以执行的大部分功能。一般来说,请使用能够满足需求的最快速的文本原型。

RichEditableText 与用于 MX 组件的 UITextField 类相似。该类不使用 FTE 或 TLF,而是扩展了旧版 TextField 类。

UITextField 与 RichEditableText 之间最重要的区别在于:

  • RichEditableText 可提供更佳的印刷效果和文本布局,且能更好地支持各国语言。
  • RichEditableText 包含面向对象模型的富文本,而 UITextField 不包含。
  • 在显示大量文本时,RichEditableText 性能表现得更好。
  • RichEditableText 嵌入字体的方式与 UITextField 不同。嵌入字体时,请有关有关如何使用 embedAsCFF 属性的文档。

 

RichEditableText 使用 TLF 面向对象模型的富文本,其中,诸如分段、段落、范围、超链接和图像等文本布局元素在运行时由 ActionScript 对象表示,可以通过编程方式访问和操纵该对象。TLF 中用于表示富文本的中心对象是 TextFlow,因此可以通过将要显示的 RichEditableText 控件的 textFlow 属性设置为 TextFlow 实例,来指定其富文本。有关如何创建 TextFlow(如通过导入 TLF 标记)的信息,请参阅 textFlow 属性的描述。如果不需要显示含有多种格式的文本,可使用 text 属性设置“纯文本”字符串。有关 text 属性和 textFlow 属性如何进行交互(例如,可以设置一个属性,然后获取另一个属性)的信息,请参阅这两个属性的描述。

编译时,可以将 TLF 标记标签放在 RichEditableText 标签内,如下例所示:

  <s:RichEditableText>Hello <s:span fontWeight="bold">World!</s:span></s:RichEditableText>
  

在此示例中,MXML 编译器设置了 content 属性,从而导致基于所指定的 FlowElement 自动创建 TextFlow。

 

默认文本格式由 CSS 样式确定,例如 fontFamilyfontSize。TextFlow 中的任何格式信息都会覆盖 CSS 样式确定的默认格式。

使用 lineHeight 样式可以控制行间距;使用 paragraphSpaceBeforeparagraphSpaceAfter 样式可以控制段间距。可以使用 textAligntextAlignLast 样式将文本对齐或两端对齐。可以使用 paddingLeftpaddingToppaddingRightpaddingBottom 样式从组件边缘插入文本。

默认情况下,RichEditableText“自动调整大小”:最初不包含任何文本时非常小,随着文本的输入,其宽度不断增大直到 maxWidth。按 Enter 键开始新行时其高度增加。

通过 widthInCharsheightInChars 属性,可以很方便地采用缩放字体大小的方式指定宽度和高度。还可以指定显式宽度或高度像素值,或者使用宽度和高度百分比值或各种约束(例如 leftrighttopbottom)。

当指定某种类型的宽度(无论是显式宽度或百分比宽度、maxWidth 还是 leftright 约束)时,文本将在组件的右边缘换行,且当文本超出组件宽度时垂直滚动查看。如果将 lineBreak 样式设置为 explicit,则仅在显式换行符处开始新行,例如,在 text 中使用 CR (\r)、LF (\n) 或 CR+LF (\r\n) 时,或者在 TLF 标记中使用 <p><br/> 时。在这些情况下,如果任何文本行的宽度超出了控件的范围,则可以水平滚动查看文本。

可以使用 maxChars 属性限制用户可以输入的字符数,使用 restrict 限制用户可以输入的字符。

multiline 属性确定了按 Enter 键后发生的操作。如果为 true,则按 Enter 键会开始一个新段落。如果为 false,则导致分派 FlexEvent.ENTER 事件。

如果不希望文本可编辑,请将 editable 属性设置为 false。如果甚至不希望文本可以进行选择,请将 selectable 属性设置为 false

因为 RichEditableText 使用 TLF,所以它支持显示从左到右 (LTR) 书写的文本(如法语)、从右到左 (RTL) 书写的文本(如阿拉伯语)以及双向书写的文本(如阿拉伯语语句中的法语语句)。如果文本的主要书写方向为从右到左,请将 direction 样式设置为 rtltextAlign 样式默认为 "start",这样,当 directionltr 时,文本左对齐;当 directionrtl 时,文本右对齐。要获得反向对齐,请将 textAlign 设置为 end

使用 TLF 后,RichEditableText 支持在一个编辑会话内执行无限次撤消/重做操作。编辑会话在组件获得键盘焦点时启动,在组件失去焦点时结束。

RichEditableText 使用 TLF 的 TextContainerManager 类处理文本显示、滚动、选择和编辑。