包 | flashx.textLayout.compose |
类 | public class StandardFlowComposer |
继承 | StandardFlowComposer FlowComposerBase Object |
实现 | IFlowComposer |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
每次调用 compose()
或 updateAllControllers()
时将首先规范化文本流。规范化过程将检查 TextFlow 对象的已修改部分,并执行下列步骤:
- 删除空的 FlowLeafElement 和 SubParagraphGroupElement 对象。
- 合并具有相同属性的同级跨距。
- 如果一个流为空,添加一个空段落。
要使用 StandardFlowComposer,请将其指定给 TextFlow 对象的 flowComposer
属性。调用 updateAllControllers()
方法可对连接到流合成器的容器中的文本设置布局,并显示这些文本。
注意:对于简单、静态的文本流,也可以使用文本行工厂类之一。这些工厂类创建行时的开销通常比流合成器小,但是不支持编辑、动态更改或用户交互。
相关 API 元素
属性 | 由以下参数定义 | ||
---|---|---|---|
composing : Boolean [只读]
如果流合成器当前正在执行合成操作,则为 True。 | StandardFlowComposer | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
damageAbsoluteStart : int [只读]
需要合成和更新的文本流中第一个元素之前的绝对位置。 | FlowComposerBase | ||
numControllers : int [只读]
指定给该 IFlowComposer 实例的容器数。 | StandardFlowComposer | ||
numLines : int [只读]
在流中合成的行的总数。 | FlowComposerBase | ||
rootElement : ContainerFormattedElement [只读]
与该 IFlowComposer 实例关联的根元素。 | StandardFlowComposer | ||
swfContext : ISWFContext
用于根据需要进行 FTE 调用的 ISWFContext 实例。 | FlowComposerBase | ||
textFlow : flashx.textLayout.elements:TextFlow [只读]
此流合成器连接到的 TextFlow 对象。 | FlowComposerBase |
方法 | 由以下参数定义 | ||
---|---|---|---|
创建 StandardFlowComposer 对象。 | StandardFlowComposer | ||
将控制器添加到该 IFlowComposer 实例。 | StandardFlowComposer | ||
将控制器添加到该 IFlowComposer 实例的指定索引位置。 | StandardFlowComposer | ||
计算要显示文本流根元素的内容所需的行数,并计算这些行在流显示容器中的位置。 | StandardFlowComposer | ||
合成根元素的内容,包括位于指定索引的容器及其之前的容器。 | StandardFlowComposer | ||
合成根元素内容,包括指定位置及其之前的内容。 | StandardFlowComposer | ||
将行标记为已损坏并需要重新合成。 | FlowComposerBase | ||
返回包含指定位置处内容的控制器的索引。 | StandardFlowComposer | ||
findLineAtPosition(absolutePosition:int, preferPrevious:Boolean = false):flashx.textLayout.compose:TextFlowLine
返回包含指定位置处内容的 TextFlowLine 对象。 | FlowComposerBase | ||
返回包含指定位置处内容的 TextFlowLine 对象的顺序行号。 | FlowComposerBase | ||
返回指定 ContainerController 对象中第一个内容元素的绝对位置。 | StandardFlowComposer | ||
返回位于指定索引的 ContainerController 对象。 | StandardFlowComposer | ||
返回指定 ContainerController 对象的索引。 | StandardFlowComposer | ||
返回具有指定行号的行。 | FlowComposerBase | ||
表示对象是否已经定义了指定的属性。 | Object | ||
交互管理器改变时由 TextFlow 调用。 | StandardFlowComposer | ||
指示在流起始位置与包含指定位置处内容的行之间,是否有任何 TextFlowLine 对象标记为受损。 | FlowComposerBase | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
从该 IFlowComposer 实例删除所有控制器。 | StandardFlowComposer | ||
从该 IFlowComposer 实例删除一个控制器。 | StandardFlowComposer | ||
从该 IFlowComposer 实例删除位于指定索引的控制器。 | StandardFlowComposer | ||
将焦点设置到包含由 absolutePosition 参数指定的位置的容器。 | StandardFlowComposer | ||
设置循环操作动态属性的可用性。 | Object | ||
StandardFlowComposer | |||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
合成根元素的内容并更新显示。 | StandardFlowComposer | ||
更新行中的长度以维护到 TextFlow 的映射。 | FlowComposerBase | ||
合成位于指定索引的容器及其之前容器的内容,并更新显示。 | StandardFlowComposer | ||
返回指定对象的原始值。 | Object |
方法 | 由以下参数定义 | ||
---|---|---|---|
如果必须进行合成,则返回 true,否则返回 false | StandardFlowComposer |
composing | 属性 |
numControllers | 属性 |
rootElement | 属性 |
rootElement:ContainerFormattedElement
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
与该 IFlowComposer 实例关联的根元素。
仅 TextFlow 对象可以是根元素。
实现
public function get rootElement():ContainerFormattedElement
StandardFlowComposer | () | 构造函数 |
public function StandardFlowComposer()
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
创建 StandardFlowComposer 对象。
要使用 StandardFlowComposer 对象,请将其指定给 TextFlow 对象的 flowComposer
属性。调用 updateAllControllers()
方法可对连接到流合成器的容器中的文本设置布局,并显示这些文本。
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.compose.StandardFlowComposer; public class StandardFlowComposer_constructor { public function createComposer(textFlow:TextFlow):void { textFlow.flowComposer = new StandardFlowComposer(); } } }
addController | () | 方法 |
public function addController(controller:ContainerController):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
将控制器添加到该 IFlowComposer 实例。
容器被添加到容器列表末尾。
参数
controller:ContainerController — 要添加的 ContainerController 对象。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_addController { import flash.display.Sprite; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public function setupController(textFlow:TextFlow):void { var container:Sprite = new Sprite(); var controller:ContainerController = new ContainerController( container, 400, 200 ); textFlow.flowComposer.addController( controller ); } } }
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 对象的位置。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_addControllerAt { import flash.display.Sprite; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public function setupController(textFlow:TextFlow):void { var container:Sprite = new Sprite(); var controller:ContainerController = new ContainerController( container, 400, 200 ); textFlow.flowComposer.addControllerAt( controller, 0 ); } } }
compose | () | 方法 |
public function compose():Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
计算要显示文本流根元素的内容所需的行数,并计算这些行在流显示容器中的位置。
如果自上次合成操作后更改了内容,则 compose()
方法只会合成内容。结果将会被保存,使得对 compose()
或 updateAllControllers()
的后续调用在流内容无更改时不会额外执行重新合成。
如果更改了任何容器的内容,则该方法返回 true
。
Boolean — 如果更改了任何内容,则为 true。
|
相关 API 元素
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_compose { import flashx.textLayout.elements.TextFlow; public function compose(textFlow:TextFlow):void { textFlow.flowComposer.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。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_composeToController { import flashx.textLayout.elements.TextFlow; public function compose(textFlow:TextFlow):void { textFlow.flowComposer.composeToController( 3 ); } } }
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。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_composeToPosition { import flashx.textLayout.elements.TextFlow; public function compose(textFlow:TextFlow):void { textFlow.flowComposer.composeToPosition( 344 ); } } }
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。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.compose.StandardFlowComposer; public class StandardFlowComposer_findControllerIndexAtPosition { public function findControllerIndexAtPosition(textFlow:TextFlow):void { var index:int = textFlow.flowComposer.findControllerIndexAtPosition( 344 ); } } }
getAbsoluteStart | () | 方法 |
public function getAbsoluteStart(controller:ContainerController):int
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回指定 ContainerController 对象中第一个内容元素的绝对位置。
位置是通过计算一个文本流中两个字符或其他元素之间的分界而计算的。文本流中第一个元素之前的位置为零。绝对位置是从流起始位置开始计算的位置。
参数
controller:ContainerController — 与该流合成器关联的 ContainerController 对象。
|
int — ContainerController 中第一个字符或图形之前的位置。
|
getControllerAt | () | 方法 |
public function getControllerAt(index:int):ContainerController
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回位于指定索引的 ContainerController 对象。
参数
index:int — 要返回的 ContainerController 对象的索引。
|
ContainerController — 位于指定位置的 ContainerController 对象。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public class StandardFlowComposer_getControllerAt { public function findControllerIndexAtPosition(textFlow:TextFlow):void { var controller:ContainerController = textFlow.flowComposer.getControllerAt( 0 ); } } }
getControllerIndex | () | 方法 |
public function getControllerIndex(controller:ContainerController):int
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
返回指定 ContainerController 对象的索引。
参数
controller:ContainerController — 对要查找的 ContainerController 对象的引用。
|
int — 指定的 ContainerController 对象的索引,如果该控制器没有连接到此流合成器,则为 -1。
|
示例 ( 如何使用本示例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public class StandardFlowComposer_getControllerIndex { public function getControllerIndex(textFlow:TextFlow, controller:ContainerController):void { var index:int = textFlow.flowComposer.getControllerIndex( controller ); } } }
interactionManagerChanged | () | 方法 |
public function interactionManagerChanged(newInteractionManager:ISelectionManager):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
交互管理器改变时由 TextFlow 调用。
此函数是自动调用的。您的代码通常不需要调用此方法。扩展 StandardFlowComposer 的类可以覆盖此方法,以更新事件侦听器和依赖于交互管理器的其他属性。
参数
newInteractionManager:ISelectionManager — 新的 ISelectionManager 实例。
|
preCompose | () | 方法 |
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, leanLeft:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
将焦点设置到包含由 absolutePosition
参数指定的位置的容器。
StandardFlowComposer 调用包含指定文本流位置的 ContainerController 对象的 setFocus()
方法。
参数
absolutePosition:int — 指定要获得焦点的容器在文本流中的位置。
| |
leanLeft:Boolean (default = false ) — 如果为 true 且位置位于一个容器中第一个字符之前,则将焦点设置到上一个容器的末尾。
|
相关 API 元素
setRootElement | () | 方法 |
public function setRootElement(newRootElement:ContainerFormattedElement):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
参数
newRootElement:ContainerFormattedElement |
updateAllControllers | () | 方法 |
public function updateAllControllers():Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
合成根元素的内容并更新显示。
文本布局在以下两个阶段进行设置:合成和显示。在合成阶段中,流合成器计算要显示内容所需的行数,以及这些行在流显示容器中的位置。在显示阶段中,流合成器更新其容器的显示子对象。updateAllControllers()
方法按先后顺序启动这两个阶段。StandardFlowComposer 会跟踪对内容所做的更改,使得只在必需时才执行完整的合成和显示阶段周期。
该方法立即且同步更新所有文本行和显示列表。
如果更改了任何容器的内容,则该方法返回 true
。
Boolean — 如果更改了任何内容,则为 true。
|
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 。
|
importToFlow()
方法创建的。
package flashx.textLayout.compose.examples { import flash.display.Sprite; import flashx.textLayout.compose.StandardFlowComposer; import flashx.textLayout.container.ContainerController; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.TextFlow; public class StandardFlowComposer_ClassExample extends Sprite { private var poem:String = "Sonnet 18\n" + "Shall I compare thee to a summer's day?\n" + "Thou art more lovely and more temperate:\n" + "Rough winds do shake the darling buds of May,\n" + "And summer's lease hath all too short a date:\n" + "Sometime too hot the eye of heaven shines,\n" + "And often is his gold complexion dimmed,\n" + "And every fair from fair sometime declines,\n" + "By chance, or nature's changing course untrimmed:\n" + "But thy eternal summer shall not fade,\n" + "Nor lose possession of that fair thou ow'st,\n" + "Nor shall death brag thou wand'rest in his shade,\n" + "When in eternal lines to time thou grow'st,\n" + "So long as men can breathe or eyes can see,\n" + "So long lives this, and this gives life to thee.\n" + "William Shakespeare\n"; private var flow:TextFlow; public function StandardFlowComposer_ClassExample() { var firstContainer:Sprite = new Sprite(); firstContainer.x = 180; firstContainer.y = 30; this.stage.addChild( firstContainer ); var secondContainer:Sprite = new Sprite(); secondContainer.x = 30; secondContainer.y = 130 this.stage.addChild( secondContainer ); var firstController:ContainerController = new ContainerController( firstContainer, 300, 100 ); var secondController:ContainerController = new ContainerController( secondContainer, 800, 600 ); flow = TextConverter.importToFlow( poem, TextConverter.PLAIN_TEXT_FORMAT ); flow.flowComposer = new StandardFlowComposer();; flow.flowComposer.addController( firstController ); flow.flowComposer.addController( secondController ); flow.flowComposer.updateAllControllers(); } } }
Tue Jun 12 2018, 11:04 AM Z