`

Flex4基础-组件定位和容器布局

    博客分类:
  • Flex
 
阅读更多

以下资料部分来自Adobe中文网,但资料年代已久,根据我自己的实验对部分内容进行了更新。

 

首先了解一个基础定义:容器和组件,组件是button、textInput等用于显示的基础控件,容器是用来存放组件的,多个组件可以放在同一容器中。

Flex的依靠容器来执行布局,大多数 Flex 容器使用预定义的规则集来自动定位您在其内定义的所有子组件。Flex 4 容器可以提供一套默认的布局:Basic、Horizontal或 Vertical以及能够基于容器内容的默认尺寸。有些容器是可植皮的,可以通过在它们的皮肤上添加Spark Scroller对它们进行滚动操作。

 

Flex 应用程序中定位组件的方法有三种:

    使用自动定位

    使用绝对定位

    使用基于限制的布局

 

  • 使用自动定位

对于大多数容器, Flex 会根据容器的布局规则 (如布局方向、容器填充和容器内的组件之间的间隙) 自动定位容器子级。对于使用自动定位的容器, 直接设置其子组件的 x y 属性或调用 move() 方法没有任何效果, 或仅有一个临时效果, 因为布局计算将组件的位置设置为一个计算的结果, 而不是指定的值。

Flex4中自动定义使用<s:HorizontalLayout/><s:VerticalLayout/>来定位:使用HorizontalLayout,容器内的组件会排放在竖直方向(同一列排放),使用<s:VerticalLayout/>,容器内的组件会排放在水平方向(同一行排放)。

可以通过指定容器属性控制容器内组件的布局格式,下列属性是最常见的:

horizontalAlign: 布局元素的水平对齐方式,可能的值有 "left" "center" "right"

verticalAlign: 布局元素的竖直对齐方式,可能的值有 "top" "middle" "bottom"

Flex4相对Flex3在标签上有很大改动,Flex4的布局采用s标签的形式来配置。看下面这个例子:首先对整个面板定义了VerticalLayout(竖直布局),同时水平和竖直都居中,然后在Application容器中定义了一个panel面板,panel面板定义了HorizontalLayout(水平布局),水平对齐方式采用了右对齐的方式。

 

<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:layout>
		<s:VerticalLayout horizontalAlign="center"  verticalAlign="middle"/>
	</s:layout>
	
	<s:Panel width="30%" height="60" title="panel布局">
		<s:layout>
			<s:HorizontalLayout  verticalAlign="middle" horizontalAlign="right"/>
		</s:layout>
		<s:Button label="按钮1" x="36" y="47"/>
		<s:TextInput/>
	</s:Panel>
	
	<s:TextInput text="文本框"/>
	<s:TextArea text="多行文本框"/>
</s:Application>
 

最后看运行结果:

  • 使用绝对定位 

使用绝对定位, 你通过使用其 x y 属性来指定子控件的位置, 或者指定基于限制的布局;否则, Flex 会将该子级置于父容器的位置 0,0 处。 当您指定 x y 坐标时, 仅当您更改这些属性值时, Flex 才会重新定位控件。使用<s:BasicLayout/>标签表示绝对定位。

下面这个例子使用了据对定位标签,容器内名为“按钮1”的组件未定义坐标则默认放在(00)位置,其它组件定义了xy则排放在指定位置。

 

<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:layout>
		<s:BasicLayout/>
	</s:layout>
	<s:Button label="按钮1"/>
	<s:Button x="92" y="0" label="按钮2"/>
	<s:TextInput x="0" y="29"/>
</s:Application>
  

运行效果如下图所示:


 

  • 使用基于限制的布局

您可以通过使用基于限制的布局同时管理子组件大小和定位子组件, 在该布局中您锚定组件的侧边或中心以相对于组件的容器进行定位。

您可以使用基于限制的布局来确定支持绝对定位的任何容器的即时子级的位置和大小。

您通过使用子组件的 top bottom left right horizontalCenter verticalCenter 样式属性来指定限制。

→锚定组件的边缘

您可以将组件的一个或多个边缘锚定在其容器的相应边缘的某个像素偏移处。 当容器调整

大小时, 锚定的子级边缘保持与父级边缘的距离相同。

top bottom left right 样式属性指定组件侧边与相应的容器侧边之间的距离 (以像素计)。比如top,表示组件的上边界离容器上边界的像素距离。注意:所有锚定属性的值必须为整数,不能是”100px”之类的。

如下例所示,在一个panel容器中放入一个button,指定上下左右的锚点都是50像素:

 

<s:Panel x="41" y="27" width="250" height="200">
		<s:Button top="50" bottom="50" left="50" right="50" label="按钮"/>
</s:Panel>
 

如果在一个方向中锚定两个边, 如顶边和底边, 则在调整容器大小时, 也会调整组件大小(组件可能被拉伸或压缩)。上例运行结果如下图所示:

 

→锚定组件的中心

您还可以将某个子组件的水平或垂直中心 (或全部两者) 锚定在容器中心的某个像素偏移处。除非您同时使用基于百分比的大小调整, 否则该子级不会在指定的尺寸内调整大小。

horizontalCenter verticalCenter 样式指定在指定的方向上组件的中心点与容器的中心之间的距离(以像素计);一个负数会从中心向左或向上移动组件。

下面的示例定义了一个panel容器,容器中放有三个button,中心锚点位置都不同:

 

	<s:Panel x="41" y="27" width="250" height="200">
		<s:Button horizontalCenter="-50" verticalCenter="-50" label="按钮1"/>
		<s:Button horizontalCenter="0" verticalCenter="-0" label="按钮2"/>
		<s:Button horizontalCenter="50" verticalCenter="50" label="按钮3"/>
	</s:Panel>
 

运行效果如下图所示:

 

以上三种布局方式可以混合使用,以达到最终目的。

不过有些规则需要注意:不要使用verticalCenter样式属性指定topbottom样式属性, verticalCenter值会覆盖其他属性。类似地,不要使用horizontalCenter样式属性指定leftright样式属性。

由基于限制的布局确定的大小会覆盖任何显式或基于百分比的大小规范。例如,如果您指定 left right 样式属性,产生的基于限制的宽度会覆盖由 width percentWidth 属性设置的任何宽度。

 

最后,给出需要牢记的若干通用技巧:

  • 总体来说, 应该选择使用限制条件 而不选择具有(x,y)值的绝对定位方式,因为限制条件可以动态地调整浏览器的大小。 当为web、桌面、手机和平板电脑设备开发跨平台的应用程序时,这一点更为重要,因为这些设备的屏幕尺寸变化较大。
  • 一般来说,可以将 left/right 用于大小调整目的,而将 horizontalCenter 和verticalCenter 用于定位目的。
  • 对于一般居中定位目的,特别是当启动最小尺寸窗口并且你希望对一个对象进行居中定位时,可以使用horizontalCenter。

 

  • 容器滚动条设置

容器用来装载组件等内容,如果容器内组件过多可能会造成内容过长过宽等情况,所以我们会考虑使用滚动条来固定容器长宽。

在Flex 3中,滚动功能内置于组件;而在 Flex 4中,该功能的实现方式不同。对Group 容器以及 Hgroup、Vgroup和 DataGroup 容器进行滚动操作的最佳方法是在一个Spark Scroller对象中包装容器。 关键之处是将Scroller的宽度和高度设置为你希望查看内容的尺寸。你也可以设置滚动位置以便在相应范围的当前位置显示内容。

Scroller属性:

horizontalScrollPolicy:水平方向是否显示滚动条(auto:自动如果超出范围才显示,on:一直显示,off:一直不显示)

verticalScrollPolicy:竖直方向是否显示滚动条(auto:自动如果超出范围才显示,on:一直显示,off:一直不显示)

下面例子,在panel中添加一个group并且设置滚动条:

 

<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="300" minHeight="300" >
	<s:Panel x="41" y="27" width="250" height="200" >
		<s:Scroller width="100%" height="100%">
		<s:Group>
			<s:layout>
				<s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
			</s:layout>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
		</s:Group>
		</s:Scroller>
	</s:Panel>
</s:Application>

 运行结果如下图所示:



 需要注意的是:<s:Scroller>内只支持继承自group的容器。

 

 

 

 

最后附上一份精彩文章:Flex4容器使用的若干技巧

  • 大小: 16.1 KB
  • 大小: 8 KB
  • 大小: 7 KB
  • 大小: 7.7 KB
  • 大小: 11 KB
2
1
分享到:
评论
3 楼 skyliuxiuping 2013-12-25  
引用
使用HorizontalLayout,容器内的组件会排放在竖直方向(同一列排放),使用<s:VerticalLayout/>,容器内的组件会排放在水平方向(同一行排放)


这里写反了吧~

2 楼 lostgdi 2012-06-28  
谢谢你的信息
1 楼 mmmzzc 2011-11-29  
这么好的帖子 怎么没人支持下
收藏 支持了

相关推荐

    Re-Flex:可调整大小的Flex布局容器组件,用于高级React Web应用程序

    Re-F | ex是我创建的基于React flex的布局组件库,因为在那里发现的所有组件都不能满足我的要求。 它旨在以简单的方式解决需要可调整大小的布局的高级React Web应用程序的需求。 这是一个基本的演示: import ...

    详解微信小程序之scroll-view的flex布局问题

    关于微信小程序的scroll-view组件,第一次写的时候是直接在scroll-view中用了一层容器包裹子元素,然后用了flex布局,并且是用了组件来实现的横向滚动,后面有提出改进,但是不记录下,就发现过了几天,就有点懵了 ...

    Flex中通常使用布局组件DashBoard

    一个组件,相当一个容器,里面可以放好多似类面板的控件,这些控件在这个容器里面可以施动,最小化,最大化。

    element中el-container容器与div布局区分详解

    用于布局的容器组件,方便快速搭建页面的基本结构: el-container:外层容器。当子元素中包含 或 时,全部子元素会垂直上下排列,否则会水平左右排列。 el-header:顶栏容器。 el-aside:侧边栏容器。 el-main:主要...

    前端开源库-flex-box

    前端开源库-flex-box柔性箱,柔性布局容器组件

    flex 第一步 源码 使用组件处理数据和交互

    内容包括:F1ex简介、Flex的安装和开发环境的建立、MXML语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript3.0编程知识、Flex的事件机制、数据绑定、组件的使用、F1ex...

    react-row:React 组件创建用于通过使用 flex 构建基于行和列(可选可调整大小)的复杂布局

    通过使用flex来创建基于行和列(可选可调整大小)构建复杂布局的 React 组件。 概述 这个想法很简单。 您将子组件添加到并且每个子组件都将附加到单独的列中。 每个充当容器,在其中自动计算其尺寸并更改 flex 值。 ...

    aframe-gui:A帧VR的图形用户界面组件框架

    aframe-gui组件提供可用于在A-Frame场景中创建用户界面的布局和gui小部件。 dist/aframe-gui.js文件定义以下组件: 成分 原始 描述 gui-flex容器 a-gui-flex容器 具有Flexbox启发的布局容器 gui-item 由其他组件...

    flex 第一步全部源码 实例源码

    内容包括:Flex简介、Flex的安装和开发环境的建立、MXML 语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript 3.0编程知识、Flex的事件机制、数据绑定、组件的使用、...

    Flex4 SDK 新特性

    Flex 4概述 (与学习资源) MXML 2009 新增MXML标签 改进的视图状态 (1) 改进的视图状态 (2) MXML图形元素与FXG Spark组件架构 Spark容器 Spark布局模型 Spark动画和特效组件 Pixel Bender集成 Spark文本...

    FLEX企业应用开发实战.part1

     2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的失效机制  2.5.4 使用ActionScript创建自定义组件  2.6 异步调用  2.6.1 异步调用导致模型数据不一致  2.6.2 异步调用导致用户...

    FLEX企业应用开发实战.part2

     2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的失效机制  2.5.4 使用ActionScript创建自定义组件  2.6 异步调用  2.6.1 异步调用导致模型数据不一致  2.6.2 异步调用导致用户...

    wx_calendar-master_日历_

    1、使用Flex布局中设定日历,要求左右2侧各位10rpx,中间组件为80rpx,其余空间均分;2、学习小程序容器和组件,在日历的月份上显示对应日历的特殊日期的弹窗;

    Flex企业应用开发实战源代码

    2.5.1 认识Flex组件和组件容器 47 2.5.2 组件生命周期与布局 51 2.5.3 组件的失效机制 59 2.5.4 使用ActionScript创建自定义组件 62 2.6 异步调用 85 2.6.1 异步调用导致模型数据不一致 85 2.6.2 异步调用导致...

    用于高级 React Web 应用程序的可调整大小的 Flex 布局容器组件

    关于 Re-F|ex Re-F|ex 是我创建的一个基于 React flex 的布局组件库,因为我在那里发现的组件都不能满足我的要求。 它旨在以一种简单的方式满足需要可调整大小的布局的高级 React Web 应用程序的需求。 这是一个基本...

    Flex第一步光盘源码

    内容包括:Flex简介、Flex的安装和开发环境的建立、MXML 语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript 3.0编程知识、Flex的事件机制、数据绑定、组件的使用、...

    flex 数据库留言本 源码

    内容包括:F1ex简介、Flex的安装和开发环境的建立、MXML语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript3.0编程知识、Flex的事件机制、数据绑定、组件的使用、F1ex...

    Flex第一步 源码

    内容包括:F1ex简介、Flex的安装和开发环境的建立、MXML语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript3.0编程知识、Flex的事件机制、数据绑定、组件的使用、F1ex...

    Flex新手教程_入门级学习笔记

    3.Flex组件 15 3.1布局设计 15 3.3 MXML Module模块应用 16 3.4 表单 16 3.5 对话框 17 3.6 列表 18 3.7弹出菜单 19 3.8复杂用户交互应用结构 21 3.8.1 Tree高级应用 21 3.8.2 DataGrid 22 3.9导航容器,导航菜单 22 ...

    TestEchat_c#界面_flex_quietxg2_下拉多选_选项卡_

    包含容器组件、FLEX布局、九宫格、选项卡、底部导航、滑块组件、图文列表、面板组?件、文本链接、链接组件、图片组件、图标、进度条、按钮、单行文本、多行文本、单选列表、多选列表、开关选择、滑动条、上传组件、...

Global site tag (gtag.js) - Google Analytics