Flex 容器基本概念


Flex 4 容器可以提供一套默認的布局:Basic、Horizontal或 Vertical以及能夠基於容器內容的默認尺寸。 當進行子組件對齊操作時,注意你正在使用的容器的最小和默認尺寸。參見表 1。有些容器是可植皮的,如果真是如此,則通過在它們的皮膚上添加Spark Scroller對它們進行滾動操作。

注意Basic 布局等同於 Flex 3的絕對布局(absolute layout )。

此外,還應該注意 Spark 容器支持包含形狀和FXG元素的 GraphicElement對象以及作為直接子組件的IVisualElement對象 UI 控件。 但並不是所有的MX容器均是這種情形。

表 1. Spark容器

名稱

最小尺寸

默認尺寸

默認布局

皮膚?

滾動條

注釋

Group

0x0

Content

Basic

 

包含於Scroller

與Box相似但沒有skin/chrome

HGroup

0x0

Content

Horizontal

 

包含於Scroller

水平對齊條目;與Vbox相似但沒有skin

VGroup

0x0

Content

Vertical

 

包含於Scroller

垂直對齊條目;與Vbox相似但沒有skin

DataGroup

0x0

Content

Basic

 

包含於Scroller

攜帶一個數據提供者和條目渲染器

SkinnableContainer

0x0

Content

Basic

X

添加至skin

包含式樣屬性

BorderContainer

112x112

112x112

Basic

X

添加至skin

包含式樣屬性

Panel

131x127

Content

Basic

X

添加至skin

包含標題條

Application

0x0

375x500 or all space in browser

Basic

X

添加至skin

Web應用程序

NavigatorContent

0x0

Content

Basic

X

添加至skin

用於導航容器

Window

0x0

100x100

Basic

X

添加至skin

只用於AIR

WindowedApplication

OS/chrome-specific

100x375

Basic

X

添加至skin

只用於AIR

在默認情形下,當你利用Flash Builder創建一個web應用程序,它將分別具有955 和600 的最小寬度和最小高度。 你可以在Flash Builder 中通過從File Template中刪除minSize變量來改變這一設置。

  1. 在Flash Builder中,選擇Flash Builder > Preferences。
  2. 展開Flash Builder 並且選擇 File Templates。
  3. 點擊MXML Web Application 將其作為 File Type。參見圖 1。
  4. 點擊Edit並且刪除${min_size}
  5. 點擊OK兩次。

從MXML Web Application 文件模板中刪除min_size變量
圖1. 從MXML Web Application 文件模板中刪除min_size變量

有些容器能夠支持嵌套 layout標簽以覆蓋表1中所示的 默認布局,它們僅僅包含作為子組件的 layout 標簽。 允許你進行布局嵌套的容器包括Application、BorderContainer、Group、Panel和SkinnableContainer。

布局形象化和布局屬性

通常,如果一個概念能夠栩栩如生地展現出來,則它易於快速地被人們接受—正如諺語所言:一副圖畫勝過千言萬語。 Justin Shacklette和 Gilles Guillemin是 FlexLayouts.org的擁有者,他們已經畫出三幅對說明Flex 4的HorizonalLayout (參見圖 2) 、Vertical Layout (參見圖 3)以及TileLayout (參見圖 4)很有幫助的示意圖。他們還展示了如何應用屬性,例如填充(paddingLeft)、對齊(horizontalAlign) 以及gap等。 你可以下載這些查看PDF。 請在下載之后欣賞他們這些令人叫絕的自定義Flex 4布局。

Flex 4的HorizontalLayout
圖2. Flex 4的HorizontalLayout

Flex 4的VerticalLayout
圖3. Flex 4的VerticalLayout

Flex 4的TileLayout
圖4. Flex 4的TileLayout

Group容器滾動

在Flex 3中,滾動功能內置於組件;而在 Flex 4中,該功能的實現方式不同。 因此,在 Flex 3和 Flex 4組件中,在如何處理滾動操作方面存在顯著差異。 對Group 容器以及 Hgroup、Vgroup和 DataGroup 容器進行滾動操作的最佳方法是在一個Spark Scroller對象中包裝容器。 關鍵之處是將Scroller的寬度和高度設置為你希望查看內容的尺寸。 你也可以設置滾動位置以便在相應范圍的當前位置顯示內容。 如果你沒有設置寬度和高度,或將它們設置為大於內容的值,則滾動條將不會出現。 例如,考慮下列代碼,它的任務是將Scroller的寬度和高度設置為圖像的尺寸。

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"             xmlns:s="library://ns.adobe.com/flex/spark"             xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
   <s:Scroller width="300" height="300">       <s:Group>          <mx:Image width="300" height="300"                  source="@Embed(source='logo.png')"/>       </s:Group>    </s:Scroller> </s:Application>

假如從Scroller對象中完全刪除 widthheight ,則滾動條不會顯示出來。參見圖5。

由於Scroller和 Image 具有相同的尺寸,導致滾動條不可見
圖5. 由於Scroller和 Image 具有相同的尺寸,導致滾動條不可見

下列代碼將顯示具有水平滾動條的圖像的左半部分,允許用戶滾動到圖像的另一半部分。參見圖6。由於Scroller高度被默認設置為內容高度,故垂直滾動條將不會添加:

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"             xmlns:s="library://ns.adobe.com/flex/spark"             xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
   <s:Scroller width="150">       <s:Group>          <mx:Image width="300" height="300"                  source="@Embed(source='logo.png')"/>       </s:Group>    </s:Scroller> </s:Application>

由於Scroller高度被設置為內容高度,導致垂直滾動條不可見
圖6. 由於Scroller高度被設置為內容高度,導致垂直滾動條不可見

可植皮容器滾動

對於可植皮的容器,其中包括 Spark Application、BorderContainer、 NavigatorContent、Panel和 Window,你應該將Scroller對象添加到圍繞 contentGroup Group對象的skin類。 例如,下面是來自一個自定義SkinnableContainer MXML 皮膚的相關代碼:

<s:Scroller width="100%" height="100%"> 
  <s:Group id="contentGroup"  minWidth="0" minHeight="0" /> 
</s:Scroller>

另一個可選方法是在你的代碼中將包圍你的內容的Scroller和 Group作為第一個子組件進行嵌套。 然而,首選方法是在skin類中保持Scroller的獨立狀態。 關於滾動和容器的更多詳細信息,參見 在 Spark容器中添加滾動條。

布局指南

下面是我在使用容器時遵循的若干指南:

  • 如果對象的容器具有基本或絕對布局,則可以使用限制條件--例如 leftrighttopbottomhorizontalCenterverticalCenter 來確定其位置。
  • 如果容器擁有具有layout 標簽或通過使用Hgroup或 Vgroup獲得的 垂直或水平布局,則可以使用horizontalAlignverticalAligngappaddingToppaddingBottompaddingLeftpaddingRight 屬性來控制子組件以及包圍它們的空白符。 這些屬性不能用於基本或絕對布局。參見表2。

表 2. 布局屬性小結

布局場景

在自身對象中使用屬性

在父容器中使用屬性

位於BasicLayout 絕對容器中的對象

Left, right, top, bottom

horizontalCenter, verticalCenter

   

位於Vertical、Horizontal或 TileLayout 容器中的對象

   

paddingLeft, paddingRight, paddingTop, paddingBottom

horizontalAlign, verticalAlign

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"             xmlns:s="library://ns.adobe.com/flex/spark"             xmlns:mx="library://ns.adobe.com/flex/mx">    <s:layout>       <s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>    </s:layout>
   <!-- Container 1 has a BasicLayout (default) and uses constraints on the label itself for placement -->    <s:SkinnableContainer id="c1" backgroundColor="0x000000" color="0xFFFFFF" width="420" height="200">       <s:Label horizontalCenter="0" top="30"              text="Basic Layout using constraints on the object itself for layout."/>    </s:SkinnableContainer>
   <!-- Container 2 has a VerticalLayout with align and padding properties set on it for label placement -->    <s:SkinnableContainer id="c2" backgroundColor="0x000000" color="0xFFFFFF" width="420" height="200" >       <s:layout>          <s:VerticalLayout horizontalAlign="center" paddingTop="30"/>       </s:layout>       <s:Label text="VerticalLayout that specifies where the label is placed with properties."/>    </s:SkinnableContainer> </s:Application>

兩個容器具有使用不同技巧定位的內容
圖7. 兩個容器具有使用不同技巧定位的內容

  • 如果希望利用水平或垂直布局在一個容器中將子組件定位在中央位置或利用 Hgroup或 VGroup將子組件定位在中央位置,則可以使用horizontalAlign="center"verticalAlign="middle"
  • 如果希望在一個具有基本或絕對布局的容器中將一個組件定位在中央位置,可以在需要定位在中央位置的組件中使用horizontalCenter="0"verticalCenter="0"

下面兩個代碼范例使用不同技巧將一個對象定位在中央位置,它們產生的結果是相同的。

第一個范例(參見圖 8)使用 horizontalAlign="center"verticalAlign="middle"

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"             xmlns:s="library://ns.adobe.com/flex/spark"             xmlns:mx="library://ns.adobe.com/flex/mx">    <s:layout>       <s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>    </s:layout>    <s:BorderContainer borderColor="red" borderWeight="5" width="300" height="300"/> </s:Application>

 使用 horizontalAlign="center" 和verticalAlign="middle"對紅色正方形進行定位
圖8. 使用 horizontalAlign="center" 和verticalAlign="middle"對紅色正方形進行定位

第二個范例(參見圖 9)使用 horizontalCenter="0"verticalCenter="0"

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"             xmlns:s="library://ns.adobe.com/flex/spark"             xmlns:mx="library://ns.adobe.com/flex/mx">    <s:BorderContainer borderColor="red" borderWeight="5" width="300" height="300" horizontalCenter="0" verticalCenter="0"/> </s:Application>

使用 horizontalCenter="0" 和 verticalCenter="0"對紅色正方形進行定位
圖9.使用 horizontalCenter="0" 和 verticalCenter="0"對紅色正方形進行定位

通用技巧

最后,給出需要牢記的若干通用技巧:

  • 總體來說, 應該選擇使用限制條件 而不選擇具有(x,y)值的絕對定位方式,因為限制條件可以動態地調整瀏覽器的大小。 當為web、桌面、手機和平板電腦設備開發跨平台的應用程序時,這一點更為重要,因為這些設備的屏幕尺寸變化較大。
  • 一般來說,可以將 left/right 用於大小調整目的,而將 horizontalCenterverticalCenter 用於定位目的。
  • 對於一般居中定位目的,特別是當啟動最小尺寸窗口並且你希望對一個對象進行居中定位時,可以使用horizontalCenter。

: 當不知使用哪個屬性時,切換至 Design視圖,以便在Property檢查工具中查看哪些選項可以使用。 在Design視圖中顯示的屬性將能夠根據選擇的組件和容器的布局進行切換。 這是一種仔細檢查你正在執行的任務的很好的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM