Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2303791
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类:

2010-09-05 19:54:19

< type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length>300) { text = text + "\r\n\n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } < class="blogstory">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open(''+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}

第一种情况是一般的flash.display.DisplayObject,包括flash.display.Shape、 flash.display.MovieClip、flash.display.Sprite等,其width和height代表该对象的外接矩形的实际 长宽像素数。等一下,这个定义还不严谨,严谨的说法应该是:如果这个DisplayObject的父容器、爷爷容器,一直到祖宗容器也就是到Stage, 全部都没有缩放,那么这个width和height就能代表该对象的外接矩形的实际长宽像素数。之所以要加上这个前提,是因为《Flex 2、Flex 3和Flash 9中的缩放》提到过,父容器的缩放并不会改变子对象的属性,而只会改变子对象在屏幕上的实际渲染尺寸。

虽然父容器的缩放 并不会改变子对象的属性,但是DisplayObject对象自己的缩放属性(scaleX和scaleY)却会影响自己的width和height. 设置DisplayObject的scaleX和scaleY会改变其width和height,而且,设置width和height也会改变 scaleX和scaleY. 这就意味着,设置一般的DisplayObject的width和height就会导致该对象缩放。不过,如果这个DisplayObject原本的 width和height为0,则无法改变它的width和height,比如一个空无一物的Sprite,不论如何设置,width和height始终 是0.

第二种情况是flash.display.TextField,它重写了基类的set width和set height函数,所以改变TextField的width和height并不会令TextField缩放,而只是改变文本区域的大小。改变width和 height时,单个文字不会变大或变小,而可显示的文字数量会变多或变少。

改变TextField的width和height不会改变TextField的scaleX和scaleY,但是改变TextField的scaleX 和scaleY会改变TextField的width和height.

第三种情况是Flex的mx.core.UIComponent,它的width和height不代表实际尺寸,而代表“占据”的尺寸,即使是一个空无一 物的VBox,也可以设置其width和height(这一点与Sprite不同).

不 过UIComponent有一点和TextField类似,改变UIComponent的width和height不会改变UIComponent的 scaleX和scaleY,但是改变UIComponent的scaleX和scaleY会改变width和height. UIComponent中有unscaledWidth和unscaledHeight两个属性。unscaledWidth等于 width/scaleX, unscaledHeight等于height/scaleY.

因为UICompoent涉及Flex的布局,所以其中还有许多尺寸相关的属性和函数,可以用来自动计算布局。这里就不一一介绍了。

最 后说一下MXML中的width属性(attribute),它其实对应了该组件在ActionScript中的percentWidth和width两 个属性(property);而MXML中的height属性(attribute)也对应了ActionScript中的percentHeight和 height两个属性(property)。


明白这些属性之后,自然容易理解剩余的属性。 

  * width,组件的当前实际宽度,以像素为单位。为什么会有当前实际宽度的这样的说法呢?因为在Flex中,能够为组件设置相对宽度,即百分比的表示宽 度,这时组件当前的实际宽度是根据父容器的宽度动态决定的,开发者无法知道实际宽度的,因此通过读取width属性可以知道其当前实际宽度。 

  * measuredWidth是组件的缺省宽度,以像素为单位。可以通过重载组件的measure方法来改变它的值,一般情况下,组件的 measuredWidth都是0。 

  * explicitWidth 是显式指定的宽度,以像素为单位。所谓显式指定宽度区别于动态的相对宽度,即区别于百分比宽度percentWidth。开发者设置该属性值时就已经知道 到组件在运行时的宽度,故称为显式指定的宽度。该属性同百分比宽度互斥,一旦设置了explicitWidth,则percentWidth的值就会变为 NaN,同理,一旦设置了percentWidth,explicitWidth值就会变为NaN。当用ActionsSript代码设置了组件的 width属性值时,explicitWidth属性会立即被赋予同样的值,同时percentWidth会变为NaN。设置explicitWidth 属性时,percentWidth会立即被设置为NaN,但是width属性则不会立即改变,要延迟组件布局的commit阶段才会变为与 explicitWidth相同的值。 

  * percentWidth是指组件的百分比宽度,比如设置组件占用父容器的50%的宽度,那么就设置该属性值为50。该属性同显式指定的宽度 (explicitWidth)互斥,一旦设置该属性值,则explicitWidth属性立即变为NaN。 

  * scaleX是当前组件宽度的缩放比例。一旦设置属性,考虑到性能,不会立即更新组件的width和explicitWidth属性,延迟到 explicitWidth时会将width和explicitWidth属性值改变。 


  除了以上基本属性之外,值得注意的就是组件MXML标记中的width属性。这个属性在编译组件MXML标记时,根据标记的该属性值的格式编译成设置 percentWidth或width属性的AS代码。如果组件MXML标记的width属性后面有百分号(%),则其被编译为设置 percentWidth属性的AS代码,如果组件MXML标记的width后面不带百分号(%),则其被编译为设置width属性的AS代码。



原文地址:http://blog.csdn.net/rubyzhudragon/archive/2009/06/09 /4256081.aspx
阅读(2594) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-07 08:22:56

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com