flex4 讀書筆記 Chapter 4

1、flex包含一個基於組件的開發模型,你只需要按需求繼承現有的組件並擴展相關的方法就可開發你的應用。

2、可視化組件包括以下主要特性:尺寸、事件、樣式、效果、皮膚。

3、flex定義了兩套組件。一套爲Spark,放在spark.*包下。一套爲MX,放在mx.*包下。Spark是在flex4中新添加的,mx爲舊版本中定義的。兩套組件的主要不同點在於樣式及皮膚的使用。另外對於容器組件,佈局的方式也改變了。

4、有些組件在兩套UI中都存中,例如按鈕,在這種情況下adobe建議你使用Spark中的組件。有些組件是某套UI特有的。例如Spark中的3d效果。mx組件中的數據可視化組件,例如DataGrid、AdvancedDataGrid。所以你的應用會包含兩套UI中的組件。

5、可視化組件的繼承層次結構:Object-EventDispatcher-DisplayObject-InteractiveObject-DisplayObjectContainer-Sprite-FlexSprite-UIComponent。flex中所有的可視化對像都繼承自UIComponent。

6、UIComponent中需要注意以下屬性。doubleClickEnabled:flex默認是不支持雙擊的,如果要開啓雙擊,請把該屬性設爲true;height:在mxml中你可以設置值爲數字,這時默認單位爲pix。你也可以設置爲70%這種比例。在as中,如果要設置百分比,你需要用percentHeight這個屬性。x,y:這組屬性只在layout爲絕對佈局時纔有效。

7、每一個flex組件都有對應的mxml接口和as接口。兩者之間是相等的。

8、每個一可視化組件都包含以下三個生命週期事件:preInitialize:組件剛被創建,還沒有添加子節點,且不可見。initialize:把子節點初始化好,並尺寸也設置好,但仍然處於不可見狀態。 creationComplete:組件已經被放在父容器中而且可見。你可以使用上面三個事件對組件做一些初始化工作。

9、flex提供了多種設置組件大小和佈局的機制。默認大小:如果你不指定組件的大小或佈局,flex會自動設置一個適合的值。顯式設置大小:你可以顯式地設置組件的height/width大小。基於比例的設置大小:例如在mxml中設置height/width=70%或在as中設置percentHeight/percentWidth=70。基於約束的佈局:你可通過組件中的樣式屬性:top,buttom等設置組件的佈局及大小。這種設置方式只可以使用在父組件爲絕對佈局的情況。

10、flex應用是基於事件驅動的。事件可以讓程序員知道用戶與UI的交互、組件的生命週期及外觀變化。當一個組件分發事件,所以對該組件進行監聽的監聽器都會被通知。

11、除了用選擇器設置組件的外觀外,還可以直接調用元素的setStyle("proName","value")設置外觀。

12、flex4中的類選擇器需要使用命名空間。例子代碼:@namespace s "library://ns.adobe.com/flex/spark"; s|BorderContainer{borderColor:red;}。

13、效果(effect)是組件在一段時間內的視覺或聽覺上的變化,例如退色,位移等。

14、數據綁定是源屬性(source)發生變化時,目的(destination)屬性會自動產生變化。

15、flex提供了三種數據綁定的方式。第一種是在mxml中使用{}括號在目的屬性中對源屬性進行綁定。第二種是在mxml中使用<fx:Binding>標籤對源屬性與目標屬性進行綁定。第三種是在as中使用BindingUtils方法對源屬性與目標屬性進行綁定。

16、數據綁定符{}可以直接對屬性進行引用 ,也可以對方法進行引用。例如:{obj.text.toUperCase()}

17、數據綁定符{}和<fx:Binding>兩種方式對數據進行綁定是從編譯時就開始的。而BindingUtils即在運行時纔開始綁定。

18、可綁定符[]的意思是當對應的屬性變化時,會觸發數據綁定事件,通知綁定的目標屬性。

19、當源對像分發initialize事件以及在源對像變化時都會觸發數據綁定事件。

20、如果你創建一個對像,並想讓它可以成爲數據綁定的源,那屬性前面必需加上[Bindable]/[Bindable("eventname")]/[Bindable(event="eventname")]標籤。當你直接使用[Bindable]標籤時,實質上等價於[Bindable("propertyChange")]。當屬性發生改變時,flex會分發propertyChange事件給綁定於此屬性的綁定目標對像。

21、通過<fx:Binding>標籤或BindingUtils可以把多個源屬性綁定到一個目標對像。綁定後,任意一個源發生改變時,目標對像都會被更新。

22、雙向綁定,數據的任意一方發生變化時,另一方都會被通知並改變。數據綁定表達式:@{}。數據綁定標籤:<fx:Binding source="" distination="destination" twoWay="true" />。另外樣式、效果、RPC中的request和arguments對像都不支持雙向綁定。

23、使用方法作爲數據綁定的源。當方法的參數爲[Bindable]時,參數的改變會觸發數據綁定事件,讓目標屬性的值更新爲方法的結果。如果方法中沒有[Bindable]參數,即目標屬性只會在開始時被更新一次。

24、如果你想綁定一個方法作爲源數據,但該方法又沒有可綁定的參數時可以使用[Bindable(event="evenname")]標籤,當該對像分發dispatchEvent(new Event("eventname"))時,綁定到方法的目標屬性就會被更新。

25、在類定義的地方便用[Bindable]標籤等價於在該類中的所有public屬性以及有對應的set/get方法的屬性中加上[Bindable]標籤。

27、在定義一個屬性的地方使用[Bindable]標籤的作用是當該屬性被替換成另一個值時,目標屬性會接收到通知事件,並更新值。這裏要注意的是隻有被替換時才更新,如果只是該屬性中的某個屬性被改變的情況,目標對像是不會被更新的。

28、在數組(ArrayCollection)中使用[Bindable]標籤時,無論是數組被替換還是數組中的元素改動,都會觸發更新事件。

29、如果只綁定數組中的某個元素時,應使用getItemAt()。這樣該元素被替換時會觸發更新事件去更新目標對像。但如果使用[num]的形式進行綁定時,不會觸發更新事件。

30、在數據綁定符({})和數據綁定標籤(<fx:Binding>)中,你可以使用as表達式。例如{Number(obj.text)*6/7}和ex4表達式。但不能在BindingUtils.bingProperty()/bindSetter()中使用。

31、as中的方法綁定接口。BindingUtils.bindSetter(funToCall,sourceObj,sourceObj.property):ChangeWatcher。

32、你可以使用ChangeWatcher.watch("sourceobj","sourceobj.property",listener);方法添加一個監聽器,當綁定時件觸發時,listener會被調用。

33、如果源屬性被替換,但被替換的對像與原對像是同一個對像,這種情況下更新更件不會被觸發。如果你想自已控制事件觸發,你可以在[Bindable("eventname")]中指定事件名,然後在想更新時通過dispatchEvent(new Event("eventname"))的方式觸發。

34、數據綁定源中的整個屬性鏈(chain)中的每一個節點都需要[Bindable],如果只有最未端屬性是Bindable,那鏈中的其它層屬性被更改時,不會觸發更新事件。

35、如果你把對像綁定到dataProvider的話,當你需要改變其中一個對像的一個屬性時,你需要以下代碼obj.dataprovider.editField(index,"propername","value");這樣更新對像纔會同時更新到顯視組件中。

36、如果你把Array綁定到顯視組件中時,該組件只在初始化時更新一次值。初始化後,當Array中的項改變時,不會觸發更新。

37、容器提供了一個層次結構讓你去佈局組件。

38、flex最頂層持容器叫application。

39、flex容器有兩種,一種是佈局容器(layout container),另一種爲導航容器(navigator container)。佈局容器用於佈局子組件/子容器的大小和位置。導航容器用於多個容器的導航。導航容器只能夠到mx容器及spark的NavigatorContent容器。

40、mx組件容器只能存放繼承自UIComponent對像的組件,而spark容器可以放下實現IVisualElement接口的組件。IVisualElement在UIComponent對像的繼承層次中被實現。

41、mx容器與spark容器的主要區別在於mx組件的佈局是固定的,而spark組件的佈局是可以被替換的。

42、創建策略(Creation Policy)。創建策略指定了容器對子組件的初始化進程。創建策略有三個選項:ContainerCreationPolicy.AUTO/NONE/ALL。all:開始時初始化所有容器。NONE:不初始化所有子容器。AUTO:子組件在被需要時才創建,例如如果設置了AUTO選項,導航容器中除首頁外,其它頁的子組件在點擊後纔會被創建。

43、如果把一個容器的layout屬性設爲null,即該容器會採用它父容器的佈局。

44、初始化事件順序:preinitialize(自外向內),contentCreationComplete(容器特有,自內向外),initialize(自內向外),cteationComplete(自內向外)。

45、容器中有一個enabled屬性,如果該屬性設爲false,即所有節組件都處於enabled=false狀態。

46、容器中的defaultButton屬性。設置該屬性後,當用戶在該容器上按回車鍵時,該按鈕被觸發。

47、spark中的四種佈局:BasicLayout(絕對定位或約束佈局),HorizontalLayout(單行水平佈局),VerticalLayout(單身垂直佈局),TileLayout(多行表格佈局)。

48、spark容器中如果放置一個大於該容器的組件,默認情況下該組件會越過容器顯視。

49、如果要把組件的顯視限制在容器內,可以使用viewport和scrollbar。

50、viewport定義了兩個區域,一個爲邏輯區域(logical content),另一個爲可視窗口(visible window)。邏輯區域包括所有的子組件。顯視區域是用戶能看見的,是邏輯區域的一個子集。

51、veiwport的contentHeight/contentWidth是邏輯區域的大小,它的大小由子組件決定。

52、height/width是可視窗口的大小。

53、verticalScrollPosition/horizontalScrollPosition是可視化窗口相對於邏輯窗口的座標。座標爲負時,可視化窗口向左上移。爲正時向右下移。

54、viewport中的clipAndEnableScrolling屬性默認爲false,即如果子組件的大小大於容器,那子組件將越過容器邊界顯視。如果設置爲true,即超出容器部份將不顯視。

55、可以通過三種方法爲容器增加滾動功能:1,增加HScrollBar/VscrollBar。2,把容器放到Scroller中。3,在容器使用的皮膚中加入Scroller。

56、在H/VScrollerBar中設置viewport中指定該bar的目標容器。當滑動滾動條時,滾動條會改變容器的verticalScrollPosition/HorizontalScrollPosition的值。

57、放在scroller中的容器的clipAndEnableScrolling的值爲true。

58、只有實現了viewport接口的容器都才能使用scroller。如果容器沒實現viewport,例如BorderContainer、SkinnableContainer,即可以在此容器內放置scroller然後再放實現了viewport的容器。也可以先在scroller內先放置group,然後再放置沒實現viewport接口的容器。

59、mx組件容器默認就支持滾動,當clipContent爲true而且子組件超出容器邊界時,滾動條自動出現。如果需要滾動條一直出現,可以設置horizontalScrollPolicy和verticalScrollPolicy屬性爲true。

60、顯視列表中對節點的操作方法,在Spark與mx組件中是不同的。主要的不同點是spark組件的方法名中大部份含有Element,而mx組件中則以Child代替。

61、在顯視列表中調用numElements/numChildren方法得到的是直接子節點的數目。

62、flex/flash有三個座標系統:全局(global),本地(local),內容(content)。

63、全局座標是以舞臺(stage)的左上角爲座標原點的座標系統。在MouseEvent中有stageX和stageY屬性就是全局座標系統中的座標軸。

64、本地座標是相對於組件左上角的座標。所有組件都有的mouseX與mouseY屬性指的是本地座標系統的值。MouseEvent中的localX與localY也是本地座標系統的值。而拖放操作中的xOffset與yOffset也是。

65、內容座標是是相對於組件內容的左上角。與全局和本地座標不同的是內容座標包括組件的內容區域。組件中的contentMouseX/contentMouseY屬性是內容座標的值。

66、在鼠標事件中的內容座標與本地座標是針對事件的目標對像,而目標對像並不是一定是你操作的對像。所以一般情況下你需要把本地座標轉化爲全局座標然後再把全局座標轉化爲內容坐杆。

67、所有的可視化組件中有關座標的屬性。contentMouseX/contentMouseY:鼠標在組件中的內容座標。

68、所有的可視化組件中有關座標的方法:contentToGlobal/contentToLocal,globalToContent/globalToLocal,locatToContent/localToGlobal。

69、佈局(layout)分兩部份,一部份爲尺寸(sizing)另一部份是定位(positioning)。

70、佈局管理器(layout manager)通過三個階段去佈局你的組件。保證階段(Commitment pass),測量階段(Measurement Pass),佈局階段(Layout Pass)。在保證階段,管理器先確認你設置的組件的一些與佈局有關的值。此時管理器會調用各組件的commitProperties()。在測量階段,管理器爲各組件設置或計算一些尺寸相關的屬性的默認值。此階段管理器會調用各組件的measure()方法。在佈局階段,管理器會移動和設置組件以及相關的畫圖方法。此時管理器會調用各組件的updateDisplayList()。

71、flex在程序初始化時(initializes)時或在一些與佈局相關的屬性改變時會自動進行佈局。

72、在某些時候你需要手動調用組件的validateNow()方法強制進行重新佈局。但此方法是計算集中型的計算,所以要確寶在需要時才調用。

73、佈局中常用的屬性。x/y:相對於父容器的左上角座標。在絕對佈局中有效。height/width:調用像素值或百分比。top,bottom,left,right:該組件相對於父容器的上下左右距離。在約束佈局/流佈局中常常用到。這幾個屬性只在絕對佈局中有效。

74、flex佈局是不考慮組件是否處於可視狀態。也就是說不論組件是否可視,它都會在區域中佔空間。但你可以通過includeInLayout設置組件是否參與佈局。要注意的是includeInLayout隻影響組件是否處於容器的佈局中而不影響組件是否處於可視狀態。

75、佈局中,adobe建議採用百份比的方式設置組件和容器的尺寸。

76、在自動佈局容器中,x/y屬性的設置是不起作用的。

77、Spacer是一個參與佈局但不可見的控件。在一些規則佈局的容器中Spacer可以起到佔位的作用。另外如果把spacer的寬設爲100%可以起到把左邊元素各左佈局,把右邊的元素向右佈局的作用。

78、雖然在自動佈局容器中,設置組件的x和y不會起作用。但你可以通過效果(effects)暫時改變組件的位置和大小。典型,例如當用戶鼠標移動組件中,組件大小變化原來的兩位並移動到容器的最前面。

79、在自動佈局容器中,如果你把autoLayout屬性設置爲false,即容器不會自動佈局。但此屬性在mx容器中有一些情況會失效。

80、組件的visible控制是否可見,而includeInLayout控件組件是否參與佈局。

81、基於約束佈局常用的屬性top/bottom/left/right這四個屬性分別代碼該組件相對於父容器的上下左右的距離。baseline代表組件中文字(標題)的底線與容器頂的距離。verticalCenter/HorizontalCenter是指組件中心與容器中心的距離。這些屬性常與一些比例的尺寸使用,做到流性佈局的效果。這些屬性中有一些是有衝突的,例如left/right與horizontalCenter。

82、Application中有兩個獨特的事件:applicationComplete和error。applicationComplete在所有初始化工作完成後被調用。error即在httpservice調用失敗後被觸發。

83、你可以在application標籤中增加一個viewSourceURL屬性,並指向一個文件。在運行過程中,在應用的任何一個空白地方右擊都會出現一個查看源碼的菜單。

84、在application中還有一些屬性可以設置。frameRate:幀率,幀/秒。默認值爲24。pageTitle:作用和html中的title一樣。preloader:指向一個自定義進度條的swc或一個類。scriptRecursionLimit:定義as調用棧的深度,默認爲100。scriptTimeLimit:在fp強制停止操作前,監聽器能操作的時間。默認值也是最大值爲60秒。usePreloader:是否使用默認的進度條。要使用進度條,app的寬度要大於160px。另外要注意的是上面的屬性只能在mxml中被設置。

85、flex中有兩個進度條。一個爲DownloadProgressBar(MX),另一個爲SparkDownloadProgressBar(Spark)。你可以通過擴展以上類去實現自定義的進度條,也可以通過繼承Sprite,並實現IPreloaderDisplay接口。另外需要注意一個問題,進度條應儘量小地引用類庫中的類,這樣可以減小進度條的大小。

86、爲了改善性能和減小程序的大小,有一部份spark容器是不支持皮膚的。一般情況下,你使用Group和DataGroup去管理佈局。使用SkinnableContainer/SkinnableDataContainer去管理佈局及自定義皮膚。

87、關於VerticalLayout/HorizontalLayout中的verticalAlign/HorizontalALign屬性。除了常規的top/bottom等對齊方式外,還有justify:設置子組件的高/寬和容器的高/寬一樣。conentJustify:把全部子組件的高度設爲各子組件中的最高組件的高度,或容器內容高度。

88、VerticalLayout.variableRowHeight:設置每一行的高度是否由各子組件確定。HorizontalColumnWidth:設置每一行的寬度是否由子組件確定。兩者的默認值爲ture。如果設置爲false,則每一行的寬度由rowHeight決定。如果rowHeight沒決定,則由VerticalLayout.typicalLayoutElement決 定。如是要各元素都很小,則寬度由第一個元素的高度決定。

89、控制欄(Control bar)的好處是當容器出現滾動時,控制欄的絕對位置始終不變。默認情況下,在Panel中的控制欄在panel的底部。如果需要改變控制欄的位置可以修改默認的PanelSkin。

90、TitleWindow是Panel的一個子類,只要用於彈出窗的使用。TitleWindow被設計爲可拖放,右上角有默認的關閉按鈕等。

91、可以使用PopUpManager.createPopUp(parent:DisplayObject,class:Class,modal:Boolean=false):IFlexDisplayObject。彈出窗口並不會阻止主窗口腳本的執行。使用removePopUp()方法移除彈出窗口。使用TitleWindow的常規流程爲新建一個繼承自TitleWindow的自定義組件。然後在上面定義一些事件處理。移除方法一般爲PopUpManager.removePopUp(this)。的<s:TitleWindow close="PopUpManager.removePopUp(this)"。另外可以使用PopUpManager.centerPopUp(obj)的方式使彈出窗口劇中。

92、mouseDownOutside事件是用戶在彈出窗口外點擊時觸發的事件。你可以使用該事件來關閉窗口。

93、TitleWindow與應用之間的數據交互。方法一:把在調用PopUpManager.createPopup時返回的結果轉型爲你的自定義組件titlewindow組件類型,然後直接調用裏面的方法或屬性傳入相關的小組件或變量。方法二、另外也可以使用一個通用的方法。把過程信息放在一個單例或靜態變量中。方法三、通過事件的方式傳遞數據。方法五:在組件內直接用parentApplication等屬性引用父組件。上面五個方法的耦合程序不同,可重用性不同,易用性也不同。在不同的情景中可以按需求選擇合適的方法傳輸數據。

94、客戶端編程與服務端編程不同。服務端是多線程,多用戶,所以一個類通常有多個實例。但客戶端的一個類在同一時間內通常只有一個實例,此時如果用靜態變量或單例可以讓編程模型更簡單。

95、dataprivider需要一個實現了IList接口的對像作爲數據來源。實現了IList接口的對像有:ArrayList,ArrayCollection,XMLListCollection。

96、DataGroup/SkinnableDataContainer需要條目渲染器(item renderer)來顯視條目。你需要配置默認的或自定義的條目渲染器來顯視數據。flex提供兩個默認的條目渲染器:spark.skins.spark.DefaultItemRenderer/DefaultComplexItemRenderer。

97、DefaultItemRenderer:對應每一個數據條目用一個label來顯視。對於簡單的String/Number數據可以使用DefaultItemRenderer。

98、DefaultComplexItemRenderer:把每一個條目放在一個單獨的DataGroup中。如果數據項全是可視化組件時,可以使用這個條目渲染器。

99、可以通過dataProvider直接增加/刪除數據。

100、在DataGroup/SkinnableDataContainer中使用虛擬化技術。每條數據的顯視都需要一個對應的條目渲染器。當數據多時,性能會大幅下降。

101、使用虛擬佈局(virtual layout),只爲可視化的元素建立條目渲染器然後重用而不是爲每個條目都建立渲染器,這種做法可以提升性能。使用虛擬佈局需要把容器的useVirtualLayout設爲ture。只在DataGroup/SkinnableDataContainer中的V/H/TLayout佈局中支持useVirtureLayout。

102、可以用itemRenderer屬性指定一個數據容器的條目渲染器,另外也可以使用itemRendererFunction動態決定每一個條目的渲染器。

103、數據容器採用條目渲染器的優先級從高到低如下:itemRendererFunctin->itemRenderer->item(如果實現了IVisualElement或DisplayObject本身。如果上面的都沒有或不符合,那會報錯。

104、可以用一個獨立的文件自定義itemRender也可以直接在數據容器內實現itemRender。

105、List類型的控件,如果dataPrivider的數據是簡單類型,如String/Number時,List會直接顯視該對像。如果是複雜類型,你需要指定labelField/labelFunction或重寫itemToLabel()方法。

106、list類組件的事件。caretChange:焦點從一個選項到另一個選項。change:選擇項由手動觸發變化。changing:選擇項改變前發出的事件,此事件發生時可調用preventDefault()阻止選擇項的變化。valueComit:編程方式觸發選擇項變化。以上的事件都是spark.events.IndexChangeEvent的子類。

107、List系統組件中支持佈局的設置。這樣使原來只支持垂直佈局的List系列組件可以變爲水平或方格佈局。

108、List系列組件中的一些屬性。requireSelection:如果爲true,即List默認會把第一個選項設爲被選項。如果爲false,第一個選項爲空。默認爲false。selectedIndex:當前被選擇的項的順序,從零開始。如果requireSelecttion爲false,可以把selectedIndex設爲-1,表示不選中。selectedItem:當前被選中的項。

109、caret item意思是當前聚焦項。它可能與selectedItem爲同一項,也可能不是。

110、List系列組件是SkinnableDataContainer的子類。SkinnableDataContainer沒有默認的itemRenderer,但List系列組件有。下面是List系列組件所對應的itemRenderer。ButtonBar:ButtonBarButton;ComboBox:DefaultItemRenderer;DropDownList:DefaultItemRenderer;List:DefaultItemRenderer;TabBar:ButtonBarButton。

111、在List組件中,你可以把allowMultipleSelection設爲true,這樣用戶按着ctrl鍵可以選擇多個項。

112、List組件中的selectedIndices/selectedItems爲被選中的序號和項,它們均爲Vector對像。

113、ButtonBar和TabBar的作用類似於單選按鈕,被點擊時會發出itemClick事件。

114、ButtonBar/TabBar可以把一個數組付值給dataprivider。這樣就是一組簡單的按鈕,也可以把一個mx的ViewStack付給dataPrivider。這樣ButtonBar/TabBar就會直接控制這組ViewStack。

115、DropDownList和ComboBox的區別:ComboBox是DropDownList的子類。DropDownList就是一個純單選的。而ComboBox除了選擇外還可以手填。DropDownList中的prompt屬性是沒被選中時顯視的文件。DropDownList的主要事件有:close/open。

116、在ComboBox中,如果你寫入的值與集合中的不匹配,在change事件中,那selectedIndex的值爲-3,對應的變量爲:ComboBox.CUSTOM_SELECTED_ITEM。然後會調用ComboBox.labelToItemFunction方法把這個值轉化爲對像。所以如果你的集合爲非簡單元素,那你需要重寫labelToItemFunction方法。

117、在一個導航容器中可以使用WideRight效果在creationCompleteEffect中。然後在各子容器中的showEffec中使用WideUp,hideEffect中使用WideDown。這樣的效果比較生動。

118、DateChooser可以通過selectableRange設定可選日期範圍,disabledRanges設置不可選日期範圍,disableDays設置不可選的天。另外可以通過dayNames屬性設置顯視星期的文字。通過formatString可以設置日期的格式,例如:MM/DD/YYYY。另外可以通過parseFunction方法或inputFormat把輸入的文字轉化爲日期對像。

119、運行時加載圖片支持以下格式:GIF/JPEG/PNG/SWF。在編譯時加載支持GIF/JPEG/PNG/SVG/SWF。也就是說SVG文件只支持編譯時加載。另外SVG文件會受一些限制,例如不支持濾境、腳本等。

200、image控件中,如果想運行時加載圖片,可以在source裏指定路徑,例如:source="url"。如果想在編譯時加載圖片,可以使用Embed,代碼如下:source="@Embed(source='assets/logo.jpg')"。對於同一張圖片,無論你引入多小次,圖片也只會被加載一次。

201、如果不設置width/height,image默認下會以圖片的大小來顯視。在設置width/height的情況下,根據scaleContent的值來決定是否放大或縮小圖像到width/height的大小,另外根據maintainAspectRatio來決定是否改變橫寬比例。

202、在一幅圖片中的rollOverEffect/rollOutEffect使用Reside效果會起到移到放大,離開縮小的效果。

203、PopUpAnchor是一個彈出控件。它的作用是把它裏面的控件顯視在應用的最前端而它本身沒有任何外觀。一般在以下幾種情景中會用到:一、在頁面的某個地方顯視操作回饋信息。二、類似搜索引擎中的相關提示框。雙擊某控件時,彈出的編輯小窗口。

204、PopUpAnchor的displayPopUp控制它是否可見。PopUpAnchor裏面組件的高寬先由popUpWidthMatchesAnchorWidth屬性決定,然後是裏面組件的寬度。另外可以通過popUpPosition設置組件彈出時處於PopUpAnchor的位置。如果PopUpAnchor與Effect一起使用,效果會更好。

205、進度條(ProgressBar)有兩種,一種是顯視具體進度的(Determinate),另一種是不顯視具體進度的(Indeterminate)。

206、ProgressBar有三種模式event(默認),polled,manual。event模式會通過source屬性中對應對像的progress/complete轉變狀態。polled模式會通過bytesLoaded/bytesTotal轉變狀態。manual模式會通過手動設置maxinum/mininum轉變狀態。

207、ProgressBar有一個label屬性,默認值爲LOADING xx%。這個屬性可以手動設置,其中有四個佔位符%1:已讀字節數,%2:總字節數,%3:已完成的百份比,%%:%符串。

208、單選按鈕(RadioButton),可以通過設置groupName屬性把相同組的單選按鈕歸爲一組。另外也可以定義一個<s:RadiioButtonGroup>,然後在單選按鈕中設置group指定。後者的好處在於可以把相關事件設置統一設在group中。另外,RadioButtonGroup如果在mxml中定義,那要定義在<fx:Declarations>中。

209、NumericStepper是一個數字控件,Spinner是NumericStepper的父類,可以用click事件聯合Spinner配合其它控件使用。

210、VideoDisplay是播放多媒體的控件,它沒有邊框及相關按鈕。控制尺寸的屬性有:maintainAspectRatio/height/width。按製播放的方法有:close/load/pause/play/stop。在VideoDisplay中可放入cuePoints(name/time)元素,同時在VideoDisplay中註冊cuePoint事件,每當影片播放到指定點時,將觸發cuePoint事件。如果是播放影片,可以在source屬性在設置路徑,如果是攝像頭,可以調用attachCamera(cam)方法。

211、VideoPlay是擁用默認按鈕的視頻播放器。

212、flex的文件控件有五個Label、RichText、RichEditableText、TextArea、TextInput。其中前四個爲多行,最後一個爲單行。前兩個爲只讀,後三個爲可編輯。

213、MX文字控件的格式主要通過style和htmlText控制,而spark的文件控件格式主要通過FTE(Flash Text Engine)和TLF(Text Layout Framework)。

214、用於顯視文字的主要控件有三個:Label,RichText,RichEditableText。三者中,左邊最輕量級同時功能也最少,右邊的相反。

215、在支持tlf的控件中,可以直接在控件的textFlow節點中放一下TextFlow節點。TextFlow節點下可以放置類html的標籤(標籤的命外空間爲<s:)。另外你也可以直接設置控件的text屬性,這樣控件會忽略一些<p>等標籤。如果你使用content屬性,TLF會解悉並轉化爲TextFlow對像。另外你也可以使用html標籤文本放在一個xml對像中,然後使用TextFlowUtil.importFromXML(xml:XML)或TextConverter.importToFlow(str:String,type:String)轉化爲TextFlow對像。

216、在mxml中相關的TLF元素如果包含一些特殊字符例如<,>等,你可以使用相關的轉義字符代替,否則,你需要在相關標籤中使用<![CDATA[]]>,在as中需要使用轉義符或轉義。

217、當你需要在一個容器中放置多個相同類型的組件時,可以使用Repeater。用法是在一個容器內放置一個Repeater,然後在Repeater內放置一個組件,例如<mx:VBox><mx:Repeater><mx:Label>。Repeater需要設置一個dataprivider。而裏面的組件可以通過repeater的ID.currentItem來引用當前組件代表的dataPrivider中的當前對像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章