`
superxielei
  • 浏览: 267155 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

使用Flex4容器若干技巧

    博客分类:
  • Flex
阅读更多

查看原文:http://www.adobe.com/cn/devnet/flex/articles/flex_containers_tips.html

本文适用于正在寻找使用Flex 4容器和布局的快速参考指南的开发人员。 尽管这不一定是一个复杂问题,但这似乎是许多开发人员的挫折的来源,特别是对于那些Flex刚刚入门的开发人员。 当开发人员不知道如何正确使用容器和布局时,他们的代码常常包含过多的嵌套容器和大量毫无意义的属性。

预备知识

要求具有一些关于 Flex 编程和Flash Builder的经验以便充分吸收本文的内容。

FLEX 容器基本概念

Flex 4 容器可以提供一套默认的布局:Basic、Horizontal或 Vertical以及能够基于容器内容的默认尺寸。 当进行子组件对齐操作时,注意你正在使用的容器的最小和默认尺寸。参见表 1。有些容器是可植皮的,如果真是如此,则通过在它们的皮肤上添加Spark Scroller对它们进行滚动操作。

注意Basic 布局等同于 Flex 3的绝对布局(absolute layout )。

此外,还应该注意 Spark 容器支持包含形状和FXG元素的 GraphicElement对象以及作为直接子组件的IVisualElement对象 UI 控件。 但并不是所有的MX容器均是这种情形。

名称

最小尺寸

默认尺寸

默认布局

皮肤?

滚动条

注释

Group

HGroup

VGroup

DataGroup

SkinnableContainer

BorderContainer

Panel

Application

NavigatorContent

Window

WindowedApplication

0x0

Content

Basic

 

包含于Scroller

与Box相似但没有skin/chrome

0x0

Content

Horizontal

 

包含于Scroller

水平对齐条目;与Vbox相似但没有skin

0x0

Content

Vertical

 

包含于Scroller

垂直对齐条目;与Vbox相似但没有skin

0x0

Content

Basic

 

包含于Scroller

携带一个数据提供者和条目渲染器

0x0

Content

Basic

X

添加至skin

包含式样属性

112x112

112x112

Basic

X

添加至skin

包含式样属性

131x127

Content

Basic

X

添加至skin

包含标题条

0x0

375x500 or all space in browser

Basic

X

添加至skin

Web应用程序

0x0

Content

Basic

X

添加至skin

用于导航容器

0x0

100x100

Basic

X

添加至skin

只用于AIR

OS/chrome-specific

100x375

Basic

X

添加至skin

只用于AIR

表 1. Spark容器

在默认情形下,当你利用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对象中完全删除 width和 height ,则滚动条不会显示出来。参见图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容器中添加滚动条*

布局指南

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

  • 如果对象的容器具有基本或绝对布局,则可以使用限制条件--例如 leftrighttopbottom 、horizontalCenter和 verticalCenter 来确定其位置。
  • 如果容器拥有具有layout 标签或通过使用Hgroup或 Vgroup获得的 垂直或水平布局,则可以使用horizontalAlign 、 verticalAlign 、gap 、 paddingTop 、 paddingBottompaddingLeft 和 paddingRight 属性来控制子组件以及包围它们的空白符。 这些属性不能用于基本或绝对布局。参见表2。

布局场景

在自身对象中使用属性

在父容器中使用属性

位于BasicLayout 绝对容器中的对象

Left, right, top, bottom

horizontalCenter, verticalCenter

   

位于Vertical、Horizontal或 TileLayout 容器中的对象

   

paddingLeft, paddingRight, paddingTop, paddingBottom

horizontalAlign, verticalAlign

表 2. 布局属性小结

下面代码定义两个容器,它们具有不同的布局和不同的属性,但显示相同的结果。参见图7:

<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 用于大小调整目的,而将 horizontalCenter 和verticalCenter 用于定位目的。
  • 对于一般居中定位目的,特别是当启动最小尺寸窗口并且你希望对一个对象进行居中定位时,可以使用horizontalCenter。

: 当不知使用哪个属性时,切换至 Design视图,以便在Property检查工具中查看哪些选项可以使用。 在Design视图中显示的属性将能够根据选择的组件和容器的布局进行切换。 这是一种仔细检查你正在执行的任务的很好的方式。

分享到:
评论
1 楼 zy14shadow 2012-06-18  
 

相关推荐

    微信小程序开发中flex布局容器及元素之属性技术释疑.pdf

    微信小程序开发中的Flex布局是一种灵活的布局方式,其核心是通过设置容器的display属性为flex或inline-flex来启用。Flex布局允许容器内的元素能够以灵活的方式进行排列,适应不同屏幕尺寸和分辨率。在微信小程序中,...

    flex实现的删除子容器

    在标题"flex实现的删除子容器"中,我们关注的核心是使用Flex布局来管理并删除容器内的子元素。下面将详细解释Flex布局的基本概念,以及如何在实践中运用它来删除子容器。 1. **Flex布局基础**: - **容器(Flex ...

    FLEX主要容器关系图

    理解这些容器之间的关系和使用方法,是掌握Flex布局和构建高质量用户界面的关键。无论是初学者还是有经验的开发者,都应该熟悉这些容器的特性和用法,以便在实际项目中灵活运用,提高开发效率和界面质量。

    flex4 实战 flex4 in action

    这本书不仅提供了理论知识,还包含了丰富的实战案例,旨在帮助读者熟练掌握Flex 4的开发技巧和应用。随书附带的PDF源码和配套源码,为学习者提供了实践和深入理解的宝贵资源。 Flex 4是Adobe Flex框架的一个重大...

    FLEX4的皮肤skin

    本文将深入探讨FLEX4中的皮肤系统,特别是SparkSkin类,并通过实例展示如何创建和应用自定义皮肤。 1. SparkSkin的介绍: SparkSkin是Flex 4(Gumbo)引入的主要皮肤类,位于`spark.skins`包下。它是一个Group类型...

    FLEX4_Flex4教程 - FLEX4从入门到精通,挺不错的值得一看

    10. **部署和优化**:最后,教程还会介绍如何将Flex4应用打包并部署到不同的平台,以及优化应用性能的技巧,如减少内存占用、提升加载速度等。 在《Flex4教程 - Flex4从入门到精通》这本书中,你将系统地学习这些...

    Flex 4的十大变化

    3. **MXML 2009**:MXML作为一种基于XML的声明式语言,在Flex 4中进行了重大更新,以适应新的组件库和Catalyst的使用。MXML 2009引入了新的命名空间,使得开发者可以区分Spark和Halo组件,同时提供更好的行为解耦。...

    Flex 4 高级编程 Flex 4 高级编程

    本篇文章将深入探讨Flex 4的高级编程技巧和特性。 1. **Spark组件架构**:Flex 4引入了全新的Spark组件集,相较于先前的 Halo 组件,Spark组件更加灵活、可定制化,并且支持皮肤和样式分离,这极大地提升了UI设计的...

    Flex的容器的说明及应用

    Flex的容器的说明及应用  布局容器  导航容器

    flex4 学习全部资料

    通过API文档,你可以了解每个类的功能、属性、方法和事件,这对于深入理解和使用Flex4至关重要。 三、Flex学习文档 学习文档通常包含了Flex4的基础知识,如MXML和ActionScript3语法、组件使用、数据绑定、事件处理...

    flex获得html容器传递的url参数值

    首先,我们要明白,当我们使用Flex Builder开发应用程序时,编译后的SWF文件会被一个HTML容器包裹,因此在实际运行时,我们实际上是在运行这个HTML文件。为了使Flex应用能够访问这些参数,我们需要借助JavaScript与...

    Flex4开发实践PPT

    通过这份Flex4开发实践PPT,开发者可以系统地学习Flex4的各个方面,从基础组件使用到高级特性的探索,逐步成为一名熟练的Flex4开发者。无论你是初学者还是有一定基础的开发者,都能从中受益匪浅,加深对Flex4技术的...

    Effortless Flex 4 Development

    《Effortless Flex 4 Development》提供了许多关于如何优化Flex 4应用程序性能的策略,包括减少渲染时间、优化内存使用、提高网络请求效率等。此外,书中还介绍了如何使用调试工具和技术来识别和修复潜在的性能瓶颈...

    flex4 中文 教程 详细介绍flex4 的用法

    Flex 4 中文教程主要面向没有基础的开发人员,通过深入浅出的方式介绍如何使用 Flex 4 构建动态、互动的 Web 应用。教程将详细介绍四种不同的架构方法,这些方法都是基于 Flex 与 BlazeDS 之间的数据通信,结合 ...

    Flex4学习文档

    在学习目标方面,Flex4学习文档旨在让学员理解RIA和Flex的概念和特点,掌握ActionScript的基本语法,能够使用Flex控件和视图状态构建程序界面,使用Flex技术与其他应用或后端进行数据通信,并整合后台框架。...

    Flex4实战代码

    CH17 - "图形与动画":Flex4提供强大的图形绘制和动画功能,这部分可能详细解释了如何使用Sprite和Shape类进行图形绘制,以及如何利用Timeline控制动画。 CH18 - "模块化与性能优化":Flex4支持模块化开发,有助于...

    flex4 学习资料

    11. **本地存储和远程数据服务**:学习如何利用Flex4与数据库交互,如使用AMF(Action Message Format)进行远程数据访问,以及SQLite本地数据库的使用。 12. **国际化和本地化**:掌握Flex4中实现多语言支持的方法...

    Flex4 一学就会 (Hello Flex4)

    Flex4,全称为Adobe Flex 4,是一款由Adobe公司开发的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。Flex4以其强大的组件库、灵活的样式系统和优化的图形渲染引擎,极大地提升了...

    Flex3与flex4的区别

    下面将详细探讨Flex4与Flex3在组件架构、布局管理、状态使用、效果实现以及迁移过程中的关键差异。 ### 组件和外观架构 Flex4最显著的变化之一是引入了全新的组件和外观架构,称为Spark。这一架构不仅提高了性能,...

    flex4组建以及DEMO实例.安装序列号

    布局管理器也是Flex4的重要部分,如VGroup、HGroup、FormLayout等,它们负责控制组件在容器中的排列和大小。 3. 报表: Flex4提供了强大的数据可视化工具,如Chart组件,支持各种图表类型,如条形图、折线图、饼图...

Global site tag (gtag.js) - Google Analytics