套件 | 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()
方法,以配置與顯示附加至流排撰寫器容器中的文字。
注意:對於簡單的靜態的文字流排,您也可以使用文字行 factory 類別之一。使用這些 factory 類別建立文字行,通常比使用流排撰寫器更簡易,但不支援編輯、動態變更或使用者互動。
相關 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
必須在 IFlowComposer 特定 SWF 內容實作中建立之呼叫所用的 ISWFContext 實體,應允許設定此屬性,讓介面的使用者可在不同的 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 |
必須在特定 SWF 內容中建立之呼叫所用的 ISWFContext 實體
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 開始 (第一個控制器的索引是 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,而最後一行的編號等於總行數減 1。如果在 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 |
傳回具有指定行編號的那一行。
行清單的編號是從 0 開始到總行數減 1。如果 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
屬性 (當容器為 InteractiveObjects 時),或實作可以其他方式來管理焦點。
參數
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()
可確保第 1 個到第 10 個 (索引 9 到 9) 容器都將予以撰寫和顯示。撰寫可於該點停止。如果 controllerIndex
為 -1 (或未指定),則應更新所有容器。
此方法會立即並同步更新所有文字行和顯示清單。
如果任一容器的內容已經變更,此方法必須傳回 true
。
參數
index:int (default = NaN ) — 最後一個要更新之容器的索引,預設會更新所有容器。
|
Boolean — 如果有任何變更則為 true。
|
Tue Jun 12 2018, 03:47 PM Z