包 | flashx.textLayout.compose |
接口 | public interface IFlowComposer |
实现器 | StandardFlowComposer |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
使用流合成器实现显示的文本流可以是动态和交互式的。流合成器可管理一个或多个显示控制器。每个控制器与一个显示对象容器(例如 Sprite)关联,为文本流创建的行通过该容器最终显示。下图演示了 TextFlow、IFlowComposer、ContainerController 和 DisplayObjectContainer 对象之间的关系:
流合成器可计算一个文本流的合成部分适合位于哪个容器中,并将相应的文本行添加到对应容器的显示对象。IFlowComposer 接口为布局计算和显示更新定义了不同的方法。IFlowComposer 还定义用于增量合成和更新文本流的方法。这些方法可用于避免在更新长文本流时遮挡用户界面。
除了管理文本的合成和显示之外,流合成器还可控制哪一个容器具有焦点,管理加亮选择内容(可能跨越容器边界)的显示,并提供对流中所有 TextLine 对象的直接访问。
要使用 IFlowComposer 实现,请将该实现的实例指定给 TextFlow 对象的 flowComposer
属性。调用 updateAllControllers()
方法可对连接到流合成器的容器中的文本设置布局,并显示这些文本。
注意:对于简单、静态的文本流,也可以使用文本行工厂类之一。这些工厂类创建行时的开销通常比流合成器小,但是不支持编辑、动态更改或用户交互。
相关 API 元素
FlowComposerBase
StandardFlowComposer
TextFlow
StringTextLineFactory
TextFlowTextLineFactory
属性 | 由以下参数定义 | ||
---|---|---|---|
composing : Boolean [只读]
如果流合成器当前正在执行合成操作,则为 True。 | IFlowComposer | ||
damageAbsoluteStart : int [只读]
根元素中第一个无效位置(从流起始位置开始的绝对位置)。 | IFlowComposer | ||
numControllers : int [只读]
指定给该 IFlowComposer 实例的容器数。 | IFlowComposer | ||
numLines : int [只读]
在流中合成的行的总数。 | IFlowComposer | ||
rootElement : ContainerFormattedElement [只读]
与该 IFlowComposer 实例关联的根元素。 | IFlowComposer | ||
swfContext : ISWFContext
ISWFContext 实例,用于在特定 SWF 上下文中必须进行的调用。IFlowComposer 的实现应该允许设置此属性,以使该接口的用户可以在包含该实现的 SWF 上下文之外的其它 SWF 上下文中创建行。 | IFlowComposer |
方法 | 由以下参数定义 | ||
---|---|---|---|
将控制器添加到该 IFlowComposer 实例。 | IFlowComposer | ||
将控制器添加到该 IFlowComposer 实例的指定索引位置。 | IFlowComposer | ||
计算要显示文本流根元素的内容所需的行数,并计算这些行在流显示容器中的位置。 | IFlowComposer | ||
合成根元素的内容,包括位于指定索引的容器及其之前的容器。 | IFlowComposer | ||
合成根元素内容,包括指定位置及其之前的内容。 | IFlowComposer | ||
将行标记为已损坏并需要重新合成。 | IFlowComposer | ||
返回包含指定位置处内容的控制器的索引。 | IFlowComposer | ||
findLineAtPosition(absolutePosition:int, preferPrevious:Boolean = false):flashx.textLayout.compose:TextFlowLine
返回包含指定位置处内容的 TextFlowLine 对象。 | IFlowComposer | ||
返回包含指定位置处内容的 TextFlowLine 对象的顺序行号。 | IFlowComposer | ||
返回位于指定索引的 ContainerController 对象。 | IFlowComposer | ||
返回指定 ContainerController 对象的索引。 | IFlowComposer | ||
返回具有指定行号的行。 | IFlowComposer | ||
交互管理器改变时由 TextFlow 调用。 | IFlowComposer | ||
指示在流起始位置与包含指定位置处内容的行之间,是否有任何 TextFlowLine 对象标记为受损。 | IFlowComposer | ||
从该 IFlowComposer 实例删除所有控制器。 | IFlowComposer | ||
从该 IFlowComposer 实例删除一个控制器。 | IFlowComposer | ||
从该 IFlowComposer 实例删除位于指定索引的控制器。 | IFlowComposer | ||
将焦点设置到包含由 absolutePosition 参数指定的位置的容器。 | IFlowComposer | ||
IFlowComposer | |||
合成根元素的内容并更新显示。 | IFlowComposer | ||
更新行中的长度以维护到 TextFlow 的映射。 | IFlowComposer | ||
合成位于指定索引的容器及其之前容器的内容,并更新显示。 | IFlowComposer |
composing | 属性 |
damageAbsoluteStart | 属性 |
numControllers | 属性 |
numLines | 属性 |
rootElement | 属性 |
rootElement:ContainerFormattedElement
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
与该 IFlowComposer 实例关联的根元素。
仅 TextFlow 对象可以是根元素。
实现
public function get rootElement():ContainerFormattedElement
相关 API 元素
swfContext | 属性 |
swfContext:ISWFContext
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
ISWFContext 实例,用于在特定 SWF 上下文中必须进行的调用
IFlowComposer 的实现应该允许设置此属性,以使该接口的用户可以在包含该实现的 SWF 上下文之外的其它 SWF 上下文中创建行。还应该提供一个默认 ISWFContext 实现。
实现
public function get swfContext():ISWFContext
public function set swfContext(value:ISWFContext):void
相关 API 元素
addController | () | 方法 |
public function addController(controller:ContainerController):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
将控制器添加到该 IFlowComposer 实例。
容器被添加到容器列表末尾。
参数
controller:ContainerController — 要添加的 ContainerController 对象。
|
addControllerAt | () | 方法 |
public function addControllerAt(controller:ContainerController, index:int):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
将控制器添加到该 IFlowComposer 实例的指定索引位置。
控制器列表从零开始(第一个控制器的索引为 0)。
参数
controller:ContainerController — 要添加的 ContainerController 对象。
| |
index:int — 数字索引,指定了在控制器列表中插入 ContainerController 对象的位置。
|
compose | () | 方法 |
composeToController | () | 方法 |
public function composeToController(index:int):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
合成根元素的内容,包括位于指定索引的容器及其之前的容器。
如果位于指定索引的容器及其之前的任何容器中的内容发生了更改,则该方法将返回 true
。如果 index
大于控制器数(或未指定),则会合成所有容器。
参数
index:int (default = NaN ) — 至少合成 TextFlow 中此容器及其之前容器的内容。如果 controllerIndex 大于控制器数,则合成到最后一个容器的结尾。
|
Boolean — 如果更改了任何内容,则为 true。
|
相关 API 元素
composeToPosition | () | 方法 |
public function composeToPosition(absolutePosition:int):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
合成根元素内容,包括指定位置及其之前的内容。
如果包含指定位置处内容的容器及其之前的任何容器中的内容发生了更改,则该方法将返回 true
。如果 absolutePosition
大于 TextFlow 的长度(或未指定),则会合成整个流。
参数
absolutePosition:int (default = NaN ) — 至少合成 TextFlow 中此位置及之前的内容。默认情况下合成到流的结尾,或者如果 absolutePosition 超过流的结尾,则合成到流的结尾。
|
Boolean — 如果更改了任何内容,则为 true。
|
相关 API 元素
damage | () | 方法 |
findControllerIndexAtPosition | () | 方法 |
public function findControllerIndexAtPosition(absolutePosition:int, preferPrevious:Boolean = false):int
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回包含指定位置处内容的控制器的索引。
可将位置视为一个文本流中两个字符或其它元素之间的分界。如果 absolutePosition
值指定的位置介于一个容器中最后一个字符与下一个容器中第一个字符之间,那么,当 preferPrevious
参数设置为 true
时将返回前一个容器,而 preferPrevious
参数设置为 false
时则返回后一个容器。
如果位于指定位置的内容不在任何容器中或超出了文本流的位置范围,则该方法一定返回 -1。
参数
absolutePosition:int — 查找容器索引时该索引对应的内容位置。
| |
preferPrevious:Boolean (default = false ) — 指定当位置介于一个容器中最后一个元素与下一个容器中第一个元素之间时,返回哪一个容器的索引。
|
int — 容器控制器的索引,如果未找到则为 -1。
|
findLineAtPosition | () | 方法 |
public function findLineAtPosition(absolutePosition:int, preferPrevious:Boolean = false):flashx.textLayout.compose:TextFlowLine
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回包含指定位置处内容的 TextFlowLine 对象。
可将位置视为一个文本流中两个字符或其它元素之间的分界。如果 absolutePosition
值表示的位置介于一行中最后一个元素与下一行中第一个元素之间,那么,当 preferPrevious
参数设置为 true
时将返回前一行,而 preferPrevious
参数设置为 false
时则会返回后一行。
参数
absolutePosition:int — 需要使用 TextFlowLine 对象的内容的位置。
| |
preferPrevious:Boolean (default = false ) — 指定当位置介于一行中最后一个元素与下一行中第一个元素之间时,返回哪一行。
|
flashx.textLayout.compose:TextFlowLine — 包含指定位置处内容的 TextFlowLine,如果未找到则为 null。
|
findLineIndexAtPosition | () | 方法 |
public function findLineIndexAtPosition(absolutePosition:int, preferPrevious:Boolean = false):int
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回包含指定位置处内容的 TextFlowLine 对象的顺序行号。
第一行的编号为 0,最后一行的编号等于行数减一。如果 absolutePosition
指定的位置超出了文本流的末尾,则该方法一定返回将指定给添加到文本流中下一个新行的编号(等于当前行的行数)。
可将位置视为一个文本流中两个字符或其它元素之间的分界。如果 absolutePosition
值表示的位置介于一个容器中最后一行与下一个容器中第一行之间,那么,当 preferPrevious
参数设置为 true
时将返回前一个容器,而 preferPrevious
参数设置为 false
时则会返回后一个容器。
参数
absolutePosition:int — 需要文本行的内容的位置。
| |
preferPrevious:Boolean (default = false ) — 指定当位置介于一个容器中最后一行与下一个容器中第一行之间时,返回哪一个容器的索引。
|
int — 指定位置的文本行的索引。如果未找到,则视为超出末尾范围并返回行数。
|
getControllerAt | () | 方法 |
public function getControllerAt(index:int):ContainerController
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回位于指定索引的 ContainerController 对象。
参数
index:int — 要返回的 ContainerController 对象的索引。
|
ContainerController — 位于指定位置的 ContainerController 对象。
|
getControllerIndex | () | 方法 |
public function getControllerIndex(controller:ContainerController):int
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回指定 ContainerController 对象的索引。
参数
controller:ContainerController — 对要查找的 ContainerController 对象的引用。
|
int — 指定的 ContainerController 对象的索引,如果该控制器没有连接到此流合成器,则为 -1。
|
getLineAt | () | 方法 |
public function getLineAt(index:int):flashx.textLayout.compose:TextFlowLine
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回具有指定行号的行。
行列表从零开始编号,直到行数减一。如果 index
的值超出了行列表的范围限制,则该函数返回 null
。
参数
index:int — 要返回的 TextFlowLine 对象的行号。
|
flashx.textLayout.compose:TextFlowLine — 具有指定行号的 TextFlowLine,如果未找到则为 null 。
|
interactionManagerChanged | () | 方法 |
public function interactionManagerChanged(newInteractionManager:ISelectionManager):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
交互管理器改变时由 TextFlow 调用。
IFlowComposer 的实现应该更新事件侦听器和引用交互管理器的属性。
参数
newInteractionManager:ISelectionManager — 新的 ISelectionManager 实例。
|
isDamaged | () | 方法 |
removeAllControllers | () | 方法 |
public function removeAllControllers():void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
从该 IFlowComposer 实例删除所有控制器。
removeController | () | 方法 |
public function removeController(controller:ContainerController):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
从该 IFlowComposer 实例删除一个控制器。
参数
controller:ContainerController — 要删除的 ContainerController 实例。
|
removeControllerAt | () | 方法 |
setFocus | () | 方法 |
public function setFocus(absolutePosition:int, preferPrevious:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
将焦点设置到包含由 absolutePosition
参数指定的位置的容器。
定义设置焦点含义的工作由实现负责。例如,实现可能使用 Stage 对象的内置 focus
属性(只要容器是 InteractiveObject),或者实现可能以其它方式管理焦点。
参数
absolutePosition:int — 指定要获得焦点的容器在文本流中的位置。
| |
preferPrevious:Boolean (default = false ) — 如果为 true 且位置位于一个容器中第一个字符之前,则将焦点设置到上一个容器的末尾。
|
相关 API 元素
setRootElement | () | 方法 |
public function setRootElement(newRootElement:ContainerFormattedElement):void
参数
newRootElement:ContainerFormattedElement |
updateAllControllers | () | 方法 |
public function updateAllControllers():Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
合成根元素的内容并更新显示。
文本布局通常在以下两个阶段进行设置:合成和显示。在合成阶段中,流合成器计算要显示内容所需的行数,以及这些行在流显示容器中的位置。在显示阶段中,流合成器更新其容器的显示子对象。updateAllControllers()
方法应该执行所有这两个阶段。高效的实现将会跟踪对内容所做的更改,使得只在必需时才执行完整的合成和显示阶段周期。
该方法立即且同步更新所有文本行和显示列表。
如果更改了任何容器的内容,则该方法一定返回 true
。
Boolean — 如果更改了任何内容,则为 true。
|
updateLengths | () | 方法 |
updateToController | () | 方法 |
public function updateToController(index:int):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
合成位于指定索引的容器及其之前容器的内容,并更新显示。
updateToController()
方法应该既合成内容,又更新显示,使位于指定索引的容器及其之前的所有容器保持最新。例如,如果您有含 20 个容器的容器链,并指定索引为 10,则 updateToController()
将使第一个到第十个(索引为 0-9)容器都合成并显示。合成过程可能在该点停止。如果 controllerIndex
为 -1(或未指定),则应更新所有容器。
该方法立即且同步更新所有文本行和显示列表。
如果更改了任何容器的内容,则该方法一定返回 true
。
参数
index:int (default = NaN ) — 要更新的最后一个容器的索引,默认情况下更新所有容器
|
Boolean — 如果更改了任何内容,则为 true。
|
Tue Jun 12 2018, 11:04 AM Z