- 浏览: 783382 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (573)
- Java基础 (76)
- C++基础 (5)
- hibernate (5)
- struts (4)
- spring (1)
- webservice (7)
- AjaX基础 (0)
- JS脚本 (53)
- 正则表达式 (5)
- html脚本 (30)
- 数据库基础 (54)
- 工作相关 (49)
- 其他 (30)
- Linux (9)
- web服务器 (17)
- JSP (13)
- eclipse (6)
- 面试题相关 (20)
- XML (3)
- Apache common (2)
- 生活 (35)
- VMware (1)
- log4j (9)
- BeanUtils (2)
- 设计模式 (3)
- UML (1)
- UNIX (1)
- ibats (5)
- GT-Grid (17)
- ABAP学习 (17)
- ABAP (35)
- ABAP--ALV (11)
- ABAP--WEBDIMPRO (0)
- abap-sample (1)
- BEMS (2)
- flex (33)
- GIS技术 (3)
最新评论
Flex的Layout机制具体的说就是Flex对组件的大小和位置的控制算法。从Flash开始初学Flex,也许会对Flex中设置组件的大小有些不适应。在Flash中,DisplayObject的width和height会根据DisplayObject所包含的“可视化元素”的大小自动调整,例如mc中的children的移动或者缩放都可能引起mc的width和height变化,而如果直接改变mc的width和height,会使mc内的可视化元素放大或缩小(但不会引起可视化元素重组),mc的scaleX和scaleY也同时改变。在Flex中,组件的width和height已经被override,因此其表现和Flash有所不同:Flex中组建width和height不一定根据可视化元素大小而定,例如设置了精确大小的Container,即使其内部的可视化元素超出了Container的范围,Container的大小仍然是指定的精确值,同样的设置Flex控件的width和height时,不是对控件可视化元素的缩放,通常都会引起可视化元素重画成新的大小,而不引起scaleX和scaleY的变化。
以前从来没想过override能有那么大的“威力”,所以被Flex的width和height搞的糊里糊涂的,呵呵看来菜鸟就是菜鸟,还好随着不断的学习总算逐渐更领会到OOP的概念和Flash与Flex这些差别。发了点小感慨作为开场白,接下来就说说初学Flex的Layout机制的一些收获吧。
设置Flex组件的大小的方式有三种:精确大小explicit sizing、默认大小default sizing、百分比大小percent sizing。精确大小是指通过ActionScript或者MXML明确设置了组件的width或height为多少像素,是一个精确值;默认大小指的是没有通过ActionScript或者MXML设置组件的width或height;百分比大小是指通过ActionScript设置了组件的percentWidth或percentHeight,也可以通过MXML设置组件的width或height为一个百分数。
Flex组件大小有以下几种:
1.实际大小:也就是最终显示出来的组件的大小,可以通过width和height指定和获得;
2.精确大小:也就是通过精确大小的方式设置组件大小时,所指定的值,可以通过explicitWidth和explicitHeight获得;
3.默认大小:也就是Flex自动计算出的组件大小,可以通过measuredWidth和measuredHeight获得,如果设置组件的大小为默认大小时,那么组件的默认大小也就是实际大小;
4.百分比大小:也就是通过百分比大小的方式设置组件大小时,所指定的值,可以通过percentWidth和percentHeigh指定和t获得;
5.组件大小的范围:也就是限制组件的大小应该处于某个区间内,可以通过minWidth、maxWidth、minHeight和maxHeight指定和获得这个区间。
知道了Flex组件大小的设置方式合类型之后,再了解一下Flex的Layout流程。Layout流程分为三步,第一步是刷新组件的属性,称为Commitment Pass。第二步是在组件属性更新后,从DisplayList中最深层的组件开始,计算每个组件的测量大小,即查看控件使用的是精确大小还是默认大小,并获取相应的值,这一步称为Measurement Pass。第三步是从DisplayList中的最外层也就是Application开始向内计算每个组件的实际的大小,并完成对控件的大小和位置设置,同时也触发控件的重画等方法,这个过程叫做Layout Pass。
这么多和大小相关的东西,相对Flash确实复杂多了,但是有了这些东西,才让Flex的Layout相对Flash更自动化。在实际使用时,不同的大小设置方式如何产生影响?这就需要更具体概述一下了。
1.采用精确大小的方式设定组件大小
当用户明确指定了组件的width和height的像素值时,布局时Flex就会强制使用用户指定的像素值,注意这种设置是强制的,Flex会保证组件的实际大小width和height就等于设定值,并且指定的大小不受组件大小的范围限制。在用户通过width和height设置精确大小时,同时也就设定了组件的explicitWidth和explicitHeight。
2.采用默认大小的方式设定组件大小
当用户不设置组件width和height,也不设置组件的percentWidth和percentHeigth时,布局时就自动计算组件的大小,也就是使用组件的默认值作为组件的实际大小。不同组件有不同的默认值,组件的默认值也会因为某些属性改变而改变,例如Button的默认值就与button的label字符长度有关,并且组件的默认大小一定会在[minWidth,maxWidth]和[minHeight,maxHeight]之间,但不一定就是这个区间内的最小值。
3.采用百分比大小方式设定组件大小
当用户使用百分比的方式指定了组件的大小时,布局时将使用空间的百分比大小。组件的百分比大小是建议性的,Flex只是尽量保证组件的大小与parent的可视区域大小成所设定的比例。有以下几点需要注意:
组件的百分比大小和精确大小是互斥的属性,当设置了组件的percentWidth和percentHeight时,相应的explicitWidth和explicitHeight属性就是NaN,反之亦然。而width和height指的是组件在布局过程执行完成后实际的长宽,并不会因为设置了百分比大小就为NaN。只是通过width和height设置精确大小时,会同时设定explicitWidth和explicitHeight属性,从而使percentWidth和percentHeight属性为NaN。
组件百分比大小指的是相对其parent中的可视区域的大小的百分比,也就是刨除parent的border width、padding、gap等区域后(gap个数会根据组件数量而定),用于放置组件的那个区域的大小,并不是parent的实际大小。对于Tile container或者TileLayout,children的百分比是指相对于每个tile cell的百分比,对于其它大部分Container,百分比是相对于整个容器可视区域的。
当组件设置为百分比大小时,组件的实际大小是在parent的大小调整过程中计算出来的,如果按照设定的比例超出了组件的minimum size和maximun size范围,那么组件会被设置成minimum size或maximun size(组件的minimum size会根据组件和组件所包含的child不同而不同),而不是百分比指定的大小(因此百分比大小只是一个建议值)。
当组件设置为百分比时,如果组件的parent是自动布局的,并且还包含了其它组件,那么parent会先保证设置为精确大小和默认大小的child组件以及parent相应的border width、padding和gap先分配空间;对于设置成百分比大小的child组件,会根据parent的可视区域大小(排除border width、padding和相应数量的gap之后的区域大小)尝试按照设置的百分比设置组件的大小,但是如果这些组件的大小超出了parent剩余的空间,那么parent会把剩余空间按照组件的百分比所构成的比例,分配给每个百分比组件(同时也要保证组件大小在minimum size或maximun size之间)。例如Hbox的实际宽度是400(确定实际宽度时,是先layout pass过程,先确定parent才确定child),包含左右padding各50,包含一个设置了宽度为120的button,parent的gap为40,还有两个设置了宽度为60%和30%的组件,那么计算这两个组件实际宽度时,首先分配一个button和左右padding以及2个gap(3个组件因此有2个gap)的空间,总大小为120 + 2×50 + 2×40 = 300,parent中剩余的区域还有100。根据百分比两个组件的大小是(400- 2×50 - 2×40)×60%和(400- 2×50 - 2×40)×30%,分别为132和66,但是132+66大于parent剩余的空间,因此,parent把剩余的100空间分为两个分给两个组件,60%的组件分到的空间是100×60/(60+30),30%的组件分到的空间是100×30/(60+30),分别是67和33,分配到的大小满足在minimum size或maximun size之间,因此最终组件的实际大小就是这个值。如果手动设置两个百分比组件的minimum size为70和50,那么67和33就不满足可取的值范围,因此组件实际大小会被设定为70和50,这样就会超出HBox的可视区域,由此就会出现滚动条(也可以设置不出现滚动条)。
当组件设置为百分比时,如果组件的parent是绝对布局的,对于halo Container的child,会根据parent的可视区域大小乘以百分比计算实际大小,同时还考虑minimum size或maximun size约束,也考虑组件的位置,保证组件处于哪个位置上时实际大小不会超出parent的边界。对于spark Container的child,会根据parent的可视区域大小乘以百分比计算实际大小,同时还考虑minimum size或maximun size约束,但不考虑child自身位置的影响。
以前从来没想过override能有那么大的“威力”,所以被Flex的width和height搞的糊里糊涂的,呵呵看来菜鸟就是菜鸟,还好随着不断的学习总算逐渐更领会到OOP的概念和Flash与Flex这些差别。发了点小感慨作为开场白,接下来就说说初学Flex的Layout机制的一些收获吧。
设置Flex组件的大小的方式有三种:精确大小explicit sizing、默认大小default sizing、百分比大小percent sizing。精确大小是指通过ActionScript或者MXML明确设置了组件的width或height为多少像素,是一个精确值;默认大小指的是没有通过ActionScript或者MXML设置组件的width或height;百分比大小是指通过ActionScript设置了组件的percentWidth或percentHeight,也可以通过MXML设置组件的width或height为一个百分数。
Flex组件大小有以下几种:
1.实际大小:也就是最终显示出来的组件的大小,可以通过width和height指定和获得;
2.精确大小:也就是通过精确大小的方式设置组件大小时,所指定的值,可以通过explicitWidth和explicitHeight获得;
3.默认大小:也就是Flex自动计算出的组件大小,可以通过measuredWidth和measuredHeight获得,如果设置组件的大小为默认大小时,那么组件的默认大小也就是实际大小;
4.百分比大小:也就是通过百分比大小的方式设置组件大小时,所指定的值,可以通过percentWidth和percentHeigh指定和t获得;
5.组件大小的范围:也就是限制组件的大小应该处于某个区间内,可以通过minWidth、maxWidth、minHeight和maxHeight指定和获得这个区间。
知道了Flex组件大小的设置方式合类型之后,再了解一下Flex的Layout流程。Layout流程分为三步,第一步是刷新组件的属性,称为Commitment Pass。第二步是在组件属性更新后,从DisplayList中最深层的组件开始,计算每个组件的测量大小,即查看控件使用的是精确大小还是默认大小,并获取相应的值,这一步称为Measurement Pass。第三步是从DisplayList中的最外层也就是Application开始向内计算每个组件的实际的大小,并完成对控件的大小和位置设置,同时也触发控件的重画等方法,这个过程叫做Layout Pass。
这么多和大小相关的东西,相对Flash确实复杂多了,但是有了这些东西,才让Flex的Layout相对Flash更自动化。在实际使用时,不同的大小设置方式如何产生影响?这就需要更具体概述一下了。
1.采用精确大小的方式设定组件大小
当用户明确指定了组件的width和height的像素值时,布局时Flex就会强制使用用户指定的像素值,注意这种设置是强制的,Flex会保证组件的实际大小width和height就等于设定值,并且指定的大小不受组件大小的范围限制。在用户通过width和height设置精确大小时,同时也就设定了组件的explicitWidth和explicitHeight。
2.采用默认大小的方式设定组件大小
当用户不设置组件width和height,也不设置组件的percentWidth和percentHeigth时,布局时就自动计算组件的大小,也就是使用组件的默认值作为组件的实际大小。不同组件有不同的默认值,组件的默认值也会因为某些属性改变而改变,例如Button的默认值就与button的label字符长度有关,并且组件的默认大小一定会在[minWidth,maxWidth]和[minHeight,maxHeight]之间,但不一定就是这个区间内的最小值。
3.采用百分比大小方式设定组件大小
当用户使用百分比的方式指定了组件的大小时,布局时将使用空间的百分比大小。组件的百分比大小是建议性的,Flex只是尽量保证组件的大小与parent的可视区域大小成所设定的比例。有以下几点需要注意:
组件的百分比大小和精确大小是互斥的属性,当设置了组件的percentWidth和percentHeight时,相应的explicitWidth和explicitHeight属性就是NaN,反之亦然。而width和height指的是组件在布局过程执行完成后实际的长宽,并不会因为设置了百分比大小就为NaN。只是通过width和height设置精确大小时,会同时设定explicitWidth和explicitHeight属性,从而使percentWidth和percentHeight属性为NaN。
组件百分比大小指的是相对其parent中的可视区域的大小的百分比,也就是刨除parent的border width、padding、gap等区域后(gap个数会根据组件数量而定),用于放置组件的那个区域的大小,并不是parent的实际大小。对于Tile container或者TileLayout,children的百分比是指相对于每个tile cell的百分比,对于其它大部分Container,百分比是相对于整个容器可视区域的。
当组件设置为百分比大小时,组件的实际大小是在parent的大小调整过程中计算出来的,如果按照设定的比例超出了组件的minimum size和maximun size范围,那么组件会被设置成minimum size或maximun size(组件的minimum size会根据组件和组件所包含的child不同而不同),而不是百分比指定的大小(因此百分比大小只是一个建议值)。
当组件设置为百分比时,如果组件的parent是自动布局的,并且还包含了其它组件,那么parent会先保证设置为精确大小和默认大小的child组件以及parent相应的border width、padding和gap先分配空间;对于设置成百分比大小的child组件,会根据parent的可视区域大小(排除border width、padding和相应数量的gap之后的区域大小)尝试按照设置的百分比设置组件的大小,但是如果这些组件的大小超出了parent剩余的空间,那么parent会把剩余空间按照组件的百分比所构成的比例,分配给每个百分比组件(同时也要保证组件大小在minimum size或maximun size之间)。例如Hbox的实际宽度是400(确定实际宽度时,是先layout pass过程,先确定parent才确定child),包含左右padding各50,包含一个设置了宽度为120的button,parent的gap为40,还有两个设置了宽度为60%和30%的组件,那么计算这两个组件实际宽度时,首先分配一个button和左右padding以及2个gap(3个组件因此有2个gap)的空间,总大小为120 + 2×50 + 2×40 = 300,parent中剩余的区域还有100。根据百分比两个组件的大小是(400- 2×50 - 2×40)×60%和(400- 2×50 - 2×40)×30%,分别为132和66,但是132+66大于parent剩余的空间,因此,parent把剩余的100空间分为两个分给两个组件,60%的组件分到的空间是100×60/(60+30),30%的组件分到的空间是100×30/(60+30),分别是67和33,分配到的大小满足在minimum size或maximun size之间,因此最终组件的实际大小就是这个值。如果手动设置两个百分比组件的minimum size为70和50,那么67和33就不满足可取的值范围,因此组件实际大小会被设定为70和50,这样就会超出HBox的可视区域,由此就会出现滚动条(也可以设置不出现滚动条)。
当组件设置为百分比时,如果组件的parent是绝对布局的,对于halo Container的child,会根据parent的可视区域大小乘以百分比计算实际大小,同时还考虑minimum size或maximun size约束,也考虑组件的位置,保证组件处于哪个位置上时实际大小不会超出parent的边界。对于spark Container的child,会根据parent的可视区域大小乘以百分比计算实际大小,同时还考虑minimum size或maximun size约束,但不考虑child自身位置的影响。
发表评论
-
Flex 非常实用的资料
2012-05-31 15:38 1223【改变输出swf的尺度,背景颜色或帧频】 在"Na ... -
Flex正则表达式规则
2012-05-31 15:35 17121.Flex正则表达式规则 1.1普通字符 字母、数字、汉 ... -
Flex中[Bindable]的使用心得
2012-05-30 16:55 920在Flex编程中,Bindble使用到最多的元数据。该标签可以 ... -
FLEX元标签_Bindable
2012-05-30 16:46 11071 概述 [Bindable ... -
Flex Bindable
2012-05-30 16:41 828对一个类声明绑定,相当于给这个类里的所有属性都声明了绑定。等同 ... -
Flex [Bindable] 以及使用方法
2012-05-30 16:37 1131绑定: 举个例子: 给下面的public变量加上[Bind ... -
关于flex开发自定义组件需要注意的问题
2012-05-23 14:24 1153一.首先回答,为什么要 ... -
Flex中自定义组件
2012-05-23 14:17 1114如要重写组件,就不得不了解Flex中组件初始化过程。初始化过程 ... -
flex,datagrid多列排序
2012-03-21 15:01 1079<?xml version="1.0" ... -
flex,datagrid 按照列来排序
2012-03-21 13:56 2139排序部分 import mx.controls.DateFie ... -
flex 动态给控件赋值,通过反射遍历MXML中的组件
2012-03-21 13:52 1373flex 动态给控件赋值,通过反射遍历MXML中的组件。当有1 ... -
flex双击不生效问题
2012-03-21 13:50 962今天用到flex的doubleclick的事件,但是不生效,原 ... -
FLEX datagrid 点击列头排序后,行编辑问题
2012-03-21 13:45 1001点击列头排序后。行编辑事件结束后,adobe默认会自己重新将d ... -
flex内存管理机制
2012-03-20 13:44 938一.简述Flex内存释放优 ... -
Flex 内存处理的方法
2012-03-20 11:25 8771.当任何对象unload后,fl ... -
Flex3 Profile的使用
2012-03-13 15:38 955flex的profile就是一个性能监测器,也是adobe向传 ... -
FLEX内存释放优化原则
2012-03-13 15:36 821FLEX内存释放优化原则: 1. 被删除对象在外部的所有引 ... -
flashplayer的缓存目录
2012-03-13 15:34 3062flashplayer的缓存目录是: XP系统下是C:/Do ... -
swf 更新后,客户端不需要清空缓存即可查看最新版本
2012-03-13 14:20 2390我们在用Flex开发应用的时候,每次修改了swf,上传到服务器 ... -
用RSL来为你的flex程序减肥
2012-03-13 14:19 1173用RSL来为你的flex程序减肥 问题:一个只有几个控件的 ...
相关推荐
【FlexLayout布局】是前端开发中的一个重要概念,尤其在微信小程序开发中,它是一种用于创建弹性布局的CSS样式规则,可以有效地实现响应式设计。在微信小程序中,开发者经常使用FlexLayout来创建复杂的用户界面,...
本资源提供的是一个使用FlexLayout布局的小程序源码,无后台支持,主要适用于学习和研究目的。 FlexLayout,又称为Flex布局,是CSS3中的一种布局模式,全称为"Flexible Box",意为“弹性盒布局”。这个布局模式主要...
FlexLayout是微信小程序中常用的布局方式,它可以灵活地调整元素在容器中的排列方式,适配不同屏幕尺寸。这个模板可能深入展示了如何运用Flex布局实现复杂页面结构,包括主次布局、网格系统、响应式设计等。 3. **...
本快速入门教程是业界专家的智慧结晶,旨在帮助初学者迅速掌握Flex 4.0的核心概念和技术。 1. **Flex SDK与Flash Builder 4**:Flex 4.0的开发环境主要依赖于Adobe Flash Builder 4,这是一个集成开发环境(IDE),...
Flex布局示例一个简单的初学者弹性布局12列布局容器/行/列主布局只有45行SASS 响应媒体查询开始只需在浏览器中打开index.html。 进行更改安装sass npm install -g sass 2.对`flex.scss`进行更改3.在CLI中运行`sass ...
总的来说,"flex4 开发文档"涵盖了Flex 4和ActionScript 3.0的全方位知识,无论是初学者还是有经验的开发者,都能从中获取到宝贵的资源和指导。通过学习这个文档,开发者可以充分利用Flex 4的潜力,创建出富有创新、...
在网页设计领域,Flex布局(Flexible Box Layout,也称为CSS3 Flexbox)是一种强大的工具,它使得构建响应式、动态调整的布局变得简单易行。本教程将带你深入理解Flex布局,并通过实例演示如何利用HTML和CSS搭建一个...
Graphical Layout System (GLS) 改进了组件布局,使得开发者可以更精确地控制组件的尺寸和位置。另外,Timeline和Effects API使得创建复杂的动画效果变得简单。 Flex4还引入了BlazeDS服务,提供与Java后端的实时...
FLEX,全称为Flexible Layout Extension,是一种在GIS(地理信息系统)中用于创建、管理和显示动态地图的开源技术。这份教程可能是为了帮助初学者快速理解和掌握FLEX在地图应用中的使用方法和技巧。 在GIS领域,...
本项目实例源码是“防母婴商城、豆瓣”,它提供了一个实际的微信小程序应用案例,适用于学习和理解小程序的开发技术和FlexLayout布局。 首先,我们要讨论的是FlexLayout布局。这是一种灵活的、响应式的布局方式,...
本篇教程主要讲述Flex组件的生命周期,以及Flex的未来发展趋势,对于Flex初学者来说是一份不错的学习资源。 首先,Flex组件生命周期(Flex Component Lifecycle)是指Flex框架用来创建和更新UI元素在Flash显示列表...
### Flex登录界面开发经验分享——CSS层叠样式表的应用 #### 一、引言 随着Flex技术的发展,越来越多的企业和个人...希望本文档能够帮助正在学习Flex的初学者更好地理解和掌握相关知识,从而提升自己的开发技能。
《Flex从入门到精通》是一本深入浅出介绍Flex技术的书籍,适合初学者以及希望进一步提升自己技能的开发者阅读。本书不仅覆盖了Flex的基础概念和核心原理,还包含了大量实战案例,帮助读者快速掌握Flex,并能够将其...
1. 布局管理:掌握各种布局管理器,如VerticalLayout、HorizontalLayout等,优化组件排列和对齐。 2. 服务调用:学习如何使用HTTPService、WebService等组件与服务器进行数据交换,实现远程数据访问。 3. 模块化开发...
9. Layout Managers:Flex中的布局管理器负责决定组件在容器中的位置和大小,如垂直布局、水平布局、网格布局等。 10. Skinning and Theming:Flex支持自定义皮肤和主题,允许开发者改变组件的外观以匹配应用的整体...
综上所述,Flex4_Tutorials中文版教程将涵盖以上各个重要知识点,帮助开发者全面掌握Flex 4的使用,无论是初学者还是有经验的开发者,都能从中受益匪浅。通过学习这本教程,你可以掌握如何利用Flex 4构建功能丰富的...
在学习Flex时,会接触到关键概念,如Flex容器(Container)、布局管理器(Layout Manager)以及事件模型。容器是组件的容器,用于组织和管理子组件的位置和大小;布局管理器则负责容器内组件的排列方式;事件模型是...
这份《使用Flex 4》的官方资料涵盖了Flex 4开发的各个方面,无论是初学者还是有经验的开发者,都能从中获得宝贵的指导,提升Flex应用的开发技能。通过深入学习和实践,开发者可以充分利用Flex 4的强大功能,创造出令...
通过上述步骤,我们可以看到FlexChart的使用并不复杂,即使是初学者也能快速上手。FlexChart不仅提供了丰富的图表类型,还支持高度定制化的样式设置,使得开发者能够轻松地创建出美观且交互性强的图表应用。无论是...