`
jie66989
  • 浏览: 254963 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

flex学习笔记-布局

    博客分类:
  • flex
 
阅读更多
flex中设置图片平铺
<mx:Image source="assets/images/main.jpg" width="500" height="500" maintainAspectRatio="false" />
<s:Image source="assets/images/main.jpg" width="500" height="500" scaleMode="stretch" />

flex填充:
<s:Group includeIn="login" top="0" bottom="0" left="0" right="0">
<s:Rect width="100%" height="100%">
<s:fill>
<s:BitmapFill source="@Embed('assets/images/main.jpg')"/>
</s:fill>
</s:Rect>
</s:Group>
这里如果把embed取消掉,就不会填充任何东西,不知道什么原因?
<s:Group top="0" bottom="0" left="0" right="0">
<s:Rect width="100%" height="100%">
<s:stroke>
<s:SolidColorStroke color="0xbc276a" weight="2"/>
</s:stroke>
<s:fill>
<s:RadialGradient>
<s:entries>
<s:GradientEntry color="0xECEC21" ratio="0.66" alpha="0.5"/>
</s:entries>
</s:RadialGradient>
</s:fill>
</s:Rect>
</s:Group>

stroke表示边框
fill就是填充色了
GradientEntry中的ratio不太明白啥意思

下面是一个弹出框:
本来可以不添加group来填充颜色的,由于我重写了bordercontainer的皮肤,导致这里再设置bgcolor不起作用,还不知道什么原因?
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
				   xmlns:s="library://ns.adobe.com/flex/spark" 
				   xmlns:mx="library://ns.adobe.com/flex/mx"
				   creationComplete="init()"
				   backgroundColor="{labelBackColor}"
				   backgroundAlpha="0.9"
				   borderAlpha="0"
				   cornerRadius="5"
				   mouseDownOutside="removeHandler()"
				   mouseWheelOutside="removeHandler()"
				   width="160" height="80">
	
	<s:states>
		<s:State name="messageAlert"/>
	</s:states>
	
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import cn.dnr.Constants;
			
			import mx.managers.PopUpManager;
			
			[Bindable]
			/***显示提示消息*/
			public var label:String ;
			[Bindable]
			public var labelColor:uint = 0x000000;
			[Bindable]
			public var labelFontSize:Number = 14;
			[Bindable]
			public var labelBackColor:uint = 0x841553;
			
			private function init():void
			{
				TimerDelay();
			}
			
			public function TimerDelay():void
			{
				currentState = "messageAlert";
				var myTimer:Timer = new Timer(Constants.ALERTTIME);
				myTimer.addEventListener("timer", timerHandler);
				myTimer.start();
			}
			
			public function timerHandler(event:TimerEvent):void {
				removeHandler();
			}
			
			protected function removeHandler():void
			{
				PopUpManager.removePopUp(this);
			}
			
			
		]]>
	</fx:Script>
	<!--提示对话窗口-->
	<s:Group top="0" bottom="0" left="0" right="0">
		<s:Rect width="100%" height="100%">
			<s:stroke>
				<s:SolidColorStroke color="0xbc276a" weight="2"/>
			</s:stroke>
			<s:fill>
				<s:RadialGradient>
					<s:entries>
						<s:GradientEntry color="0xECEC21" ratio="0.66" alpha="0.5"/>
					</s:entries>
				</s:RadialGradient>
			</s:fill>
		</s:Rect>
	</s:Group>
	
	<s:Group top="10" bottom="10" left="20" right="20">
		<s:Rect width="100%" height="100%">
			<s:fill>
				<s:RadialGradient>
					<s:entries>
						<s:GradientEntry color="0x0056FF" ratio="0.00" alpha="0.5"/>
					</s:entries>
				</s:RadialGradient>
			</s:fill>
		</s:Rect>
	</s:Group>
	
	<s:VGroup includeIn="messageAlert" width="100%" height="100%"
			  horizontalAlign="center" verticalAlign="middle">
		<s:Label text="{label}" 
				 color="{labelColor}" 
				 fontSize="{labelFontSize}"/>
	</s:VGroup>
</s:BorderContainer>


有关重写皮肤,皮肤主要作用是来布局对应组件和设置样式,但同样也可以出发事件,这里需要注意到是,如果要扩展原有组件添加的元素的变量名称需要和皮肤中的一样
如:组件中有一个元素:
[SkinPart(required="false")]
public var btnMin:Image;
皮肤中就应该有对应的
<s:Image id="btnMin" toolTip="最小化" source="assets\images\Buttonminimize.png"
width="18" height="18" right="27" top="7"/>
类型也需要相同,而且[SkinPart(required="false")]这句话不能少,原因也不清楚,先用着吧

下面为重写的titleWindow组件,添加了最小化按钮,是项目中用到的,直接帖过来的
组件:
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   skinClass="cn.dnr.skins.TitleWindowSkin">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	
	<s:states>
		<s:State name="open"/>
		<s:State name="minimized"/>
		<s:State name="restore"/>
		<s:State name="closed"/>
	</s:states>
	
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.core.FlexGlobals;
			import mx.events.CloseEvent;
			import mx.managers.CursorManager;
			
			import spark.components.Button;
			import spark.components.Image;
			
			[SkinPart(required="false")] 
			public var btnMin:Image;
//			[SkinPart(required="false")] 
//			public var btnMax:Image;
//			[SkinPart(required="false")] 
//			public var btnRestore:Image;
			[SkinPart(required="false")] 
			public var btnClose:Image;
			
			private var theStatus:int=0;//窗口状态,0正常 1最大化 2最小化;
			public var isReSize:Boolean;//是否允许缩放
			private var theMinWidth:Number=200;//窗口最小宽度
			private var theMinHeight:Number=200;//窗口最大高度
			private var theOldPoint:Point;//改变大小前窗口的x,y坐标
			private var theOldWidth:Number;//最大最小化时的宽
			private var theOldHeight:Number;//最大最小化时的高
			
			private var mouseMargin:Number=4;//响应范围
			//设置光标的位置值 右上:3  右下:6 左下:11  左上8
			private var theSide:Number=0;
			private var SIDE_OTHER:Number=0;
			private var SIDE_TOP:Number=1;
			private var SIDE_RIGHT:Number=2;
			private var SIDE_LEFT:Number=7;
			private var SIDE_BOTTOM:Number=4;
			
			private var preWidth:Number;
			private var preHeight:Number;
			private var preX:Number;
			private var preY:Number;
			
			//当前鼠标光标类
			public var currentType:Class=null;
			
			//鼠标光标图标
			[Embed("assets/images/resizeCursorH.gif")]
			private var CursorH:Class;
			[Embed("assets/images/resizeCursorTLBR.gif")]
			private var CursorR:Class;
			[Embed("assets/images/resizeCursorTRBL.gif")]
			private var CursorL:Class;
			[Embed("assets/images/resizeCursorV.gif")]
			private var CursorV:Class;
			private var CursorNull:Class=null;
			
			protected override function createChildren():void{
				super.createChildren();				
				//监听按钮事件
//				btnClose.addEventListener(MouseEvent.CLICK,onCloseClick);
				btnMin.addEventListener(MouseEvent.CLICK,onMinClick);
//				btnMax.addEventListener(MouseEvent.CLICK,onMaxClick);
//				btnRestore.addEventListener(MouseEvent.CLICK,onReClick);
				//侦听拖拽相关的事件
				this.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
				this.addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
				this.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);	
			}
			
			private function onCloseClick(event:MouseEvent):void
			{
//				btnMax.visible=true;
//				btnRestore.visible=false;
				theStatus=0;
				this.dispatchEvent(new Event("myClose"));
			}
			private function onMinClick(event:MouseEvent):void
			{
				onSaveRestore();
				this.dispatchEvent(new Event("myMin"));
//				btnMax.visible = false;
//				btnRestore.visible=true;
				theStatus=2;
			}
			private function onMaxClick(event:MouseEvent):void
			{
				onSaveRestore();
				this.dispatchEvent(new Event("myMax"));
				this.isPopUp=false;
//				btnMax.visible=false;
//				btnRestore.visible=true;
				theStatus=1;
				
				preWidth = this.width;
				preHeight = this.height;
				preX = this.x;
				preY = this.y;
				
				this.width = stage.width;
				this.height = stage.height-50;
				this.x=0;
				this.y=0;
			}
			private function onReClick(event:MouseEvent):void
			{
				onGetRestore();
				this.dispatchEvent(new Event("myRestore"));
				this.isPopUp=true;
//				btnMax.visible=true;
//				btnRestore.visible=false;
				theStatus=0;
				
				this.width = preWidth;
				this.height = preHeight;
				this.x=preX;
				this.y=preY;
			}
			private function onMouseUp(event:MouseEvent):void
			{
				if(isReSize)
				{
					FlexGlobals.topLevelApplication.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp);
					FlexGlobals.topLevelApplication.removeEventListener(MouseEvent.MOUSE_MOVE,onResize);
					isReSize=false;
				}
				onChangeCursor(CursorNull);
			}
			private function onMouseDown(event:MouseEvent):void
			{
				if(theSide!=0)
				{
					isReSize=true;
					FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
					FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_MOVE,onResize);
					var point:Point=new Point();
					point=this.localToContent(point);
					theOldPoint=point;
				}
			}
			private function onResize(event:MouseEvent):void
			{
				if(isReSize)
				{
					var xPlus:Number=FlexGlobals.topLevelApplication.mouseX-this.x;
					var yPlus:Number=FlexGlobals.topLevelApplication.mouseY-this.y;
					switch(theSide)
					{
						case SIDE_RIGHT+SIDE_BOTTOM:
							this.width=xPlus>theMinWidth?xPlus:theMinWidth;
							this.height=yPlus>theMinHeight?yPlus:theMinHeight;
							break;
						case SIDE_LEFT+SIDE_TOP:
							this.width=this.width-xPlus>theMinWidth?this.width-xPlus:theMinWidth;
							this.height=this.height-yPlus>theMinHeight?this.height-yPlus:theMinHeight;
							this.x=this.width>theMinWidth?FlexGlobals.topLevelApplication.mouseX:this.x;
							this.y=this.height>theMinHeight?FlexGlobals.topLevelApplication.mouseY:this.y;
							break;
						case SIDE_LEFT+SIDE_BOTTOM:
							this.width=this.width-xPlus>theMinWidth?this.width-xPlus:theMinWidth;
							this.height=yPlus>theMinHeight?yPlus:theMinHeight;
							this.x=this.width>theMinWidth?FlexGlobals.topLevelApplication.mouseX:this.x;
							break;
						case SIDE_RIGHT+SIDE_TOP:
							this.width=xPlus>theMinWidth?xPlus:theMinWidth;
							this.height=this.height-yPlus>theMinHeight?this.height-yPlus:theMinHeight;
							this.y=this.height>theMinHeight?FlexGlobals.topLevelApplication.mouseY:this.y;
							break;
						case SIDE_RIGHT:
							this.width=xPlus>theMinWidth?xPlus:theMinWidth;
							break;
						case SIDE_LEFT:
							this.width=this.width-xPlus>theMinWidth?this.width-xPlus:theMinWidth;
							this.x=this.width>theMinWidth?FlexGlobals.topLevelApplication.mouseX:this.x;
							break;
						case SIDE_BOTTOM:
							this.height=yPlus>theMinHeight?yPlus:theMinHeight;
							break;
						case SIDE_TOP:
							this.height=this.height-yPlus>theMinHeight?this.height-yPlus:theMinHeight;
							this.y=this.height>theMinHeight?FlexGlobals.topLevelApplication.mouseY:this.y;
							break;
					}
				}
			}
			private function onMouseOut(event:MouseEvent):void
			{
				if(!isReSize&&this.theStatus==0)
				{
					theSide=0;
					onChangeCursor(CursorNull);
					this.isPopUp=true;
				}
			}
			private function onMouseMove(event:MouseEvent):void
			{
				if(!theStatus)
				{
					var point:Point=new Point();
					point=this.localToGlobal(point);
					var xPosition:Number=FlexGlobals.topLevelApplication.mouseX;
					var yPosition:Number=FlexGlobals.topLevelApplication.mouseY;
					if(xPosition>=(point.x+this.width-mouseMargin)&&yPosition>=(point.y+this.height-mouseMargin))
					{//右下
						onChangeCursor(CursorR,-9,-9);
						theSide=SIDE_RIGHT+SIDE_BOTTOM;
						this.isPopUp=false;
					}else if(xPosition<=(point.x+mouseMargin)&&yPosition<=(point.y+mouseMargin))
					{//左上
						onChangeCursor(CursorR,-9,-9);
						theSide=SIDE_LEFT+SIDE_TOP;
						this.isPopUp=false;
					}else if(xPosition<=(point.x+mouseMargin)&&yPosition>=(point.y+this.height-mouseMargin))
					{//左下
						onChangeCursor(CursorL,-9,-9);
						theSide=SIDE_BOTTOM+SIDE_LEFT;
						this.isPopUp=false;
					}else if(xPosition>=(point.x+this.width-mouseMargin)&&yPosition<=(point.y+mouseMargin))
					{//右上
						onChangeCursor(CursorL,-9,-9);
						theSide=SIDE_RIGHT+SIDE_TOP;
						this.isPopUp=false;
					}else if(xPosition>(point.x+this.width-mouseMargin))
					{//右
						onChangeCursor(CursorH,-9,-9);
						theSide=SIDE_RIGHT;
						this.isPopUp=false;
					}else if(xPosition<(point.x+mouseMargin))
					{//左
						onChangeCursor(CursorH,-9,-9);
						theSide=SIDE_LEFT;
						this.isPopUp=false;
					}else if(yPosition<(point.y+mouseMargin))
					{//上
						onChangeCursor(CursorV,-9,-9);
						theSide=SIDE_TOP;
						this.isPopUp=false;
					}
					else if(yPosition>(point.y+this.height-mouseMargin))
					{//下
						onChangeCursor(CursorV,-9,-9);
						theSide=SIDE_BOTTOM;
						this.isPopUp=false;
					}
					else
					{
						onChangeCursor(CursorNull);
						if(!isReSize&&theStatus==0)
						{
							theSide=0;
							this.isPopUp=true;
						}
					}
					event.updateAfterEvent();
				}
			}
			private function onChangeCursor(type:Class,xOffset:Number=0,yOffset:Number=0):void
			{
				if(currentType!=type)
				{
					currentType=type;
					CursorManager.removeCursor(CursorManager.currentCursorID);
					if(type!=null)
					{
						CursorManager.setCursor(type,2,xOffset,yOffset);
					}
				}
			}
			private function onSaveRestore():void
			{
				var point:Point=new Point();
				theOldPoint=this.localToGlobal(point);
				theOldWidth=this.width;
				theOldHeight=this.height;
			}
			private function onGetRestore():void
			{
				this.x=theOldPoint.x;
				this.y=theOldPoint.y
				this.width=theOldWidth;
				this.height=theOldHeight;
			}
		]]>
	</fx:Script>
</s:TitleWindow>


皮肤:
<?xml version="1.0" encoding="utf-8"?>
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
			 xmlns:fb="http://ns.adobe.com/flashbuilder/2009" blendMode="normal" mouseEnabled="false"
			 minWidth="176" minHeight="76" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
	
	<fx:Metadata>
		<![CDATA[ 
		/** 
		* @copy spark.skins.spark.ApplicationSkin#hostComponent
		*/
		[HostComponent("spark.components.TitleWindow")]
		]]>
	</fx:Metadata> 
	
	<fx:Script fb:purpose="styling">
		<![CDATA[
			import mx.core.FlexVersion;
			
			/* Define the skin elements that should not be colorized. 
			For panel, border and title background are skinned, but the content area, background, border, and title text are not. */
			static private const exclusions:Array = ["background", "titleDisplay", "contentGroup", "border"];
			
			/* exclusions before Flex 4.5 for backwards-compatibility purposes */
			static private const exclusions_4_0:Array = ["background", "titleDisplay", "contentGroup"];
			
			/**
			 * @private
			 */
			override public function get colorizeExclusions():Array 
			{
				// Since border is styleable via borderColor, no need to allow chromeColor to affect
				// the border.  This is wrapped in a compatibility flag since this change was added  
				// in Flex 4.5
				if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
				{
					return exclusions_4_0;
				}
				
				return exclusions;
			}
			
			/**
			 * @private
			 */
			override protected function initializationComplete():void
			{
				useChromeColor = true;
				super.initializationComplete();
			}
			
			/**
			 * @private
			 */
			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
			{
				if (getStyle("borderVisible") == true)
				{
					border.visible = true;
					background.left = background.top = background.right = background.bottom = 1;
					contents.left = contents.top = contents.right = contents.bottom = 1;
				}
				else
				{
					border.visible = false;
					background.left = background.top = background.right = background.bottom = 0;
					contents.left = contents.top = contents.right = contents.bottom = 0;
				}
				
				dropShadow.visible = getStyle("dropShadowVisible");
				
				var cr:Number = getStyle("cornerRadius");
				var withControls:Boolean = 
					(currentState == "disabledWithControlBar" || 
						currentState == "normalWithControlBar" ||
						currentState == "inactiveWithControlBar");
				
				if (cornerRadius != cr)
				{
//					cornerRadius = cr;
					
					dropShadow.tlRadius = cornerRadius;
					dropShadow.trRadius = cornerRadius;
					dropShadow.blRadius = withControls ? cornerRadius : 0;
					dropShadow.brRadius = withControls ? cornerRadius : 0;
					
					setPartCornerRadii(topMaskRect, withControls); 
					setPartCornerRadii(border, withControls); 
					setPartCornerRadii(background, withControls);
				}
				
				if (bottomMaskRect) setPartCornerRadii(bottomMaskRect, withControls); 
				
				borderStroke.color = getStyle("borderColor");
				borderStroke.alpha = getStyle("borderAlpha");
				backgroundFill.color = getStyle("backgroundColor");
				backgroundFill.alpha = getStyle("backgroundAlpha");
				
				super.updateDisplayList(unscaledWidth, unscaledHeight);
			}
			
			/**
			 * @private
			 */  
			private function setPartCornerRadii(target:Rect, includeBottom:Boolean):void
			{            
				target.topLeftRadiusX = cornerRadius;
				target.topRightRadiusX = cornerRadius;
				target.bottomLeftRadiusX = includeBottom ? cornerRadius : 0;
				target.bottomRightRadiusX = includeBottom ? cornerRadius : 0;
			}
			
			private var cornerRadius:Number=5;
		]]>
	</fx:Script>
	
	<s:states>
		<s:State name="normal" />
		<s:State name="inactive" stateGroups="inactiveGroup" />
		<s:State name="disabled" />
		<s:State name="normalWithControlBar" stateGroups="withControls" />
		<s:State name="inactiveWithControlBar" stateGroups="withControls, inactiveGroup" />
		<s:State name="disabledWithControlBar" stateGroups="withControls" />
	</s:states>
	
	<!--- drop shadow can't be hittable so it stays sibling of other graphics @private-->
	<s:RectangularDropShadow id="dropShadow" blurX="20" blurY="20" alpha="0.32" 
							 alpha.inactiveGroup="0.22" distance="11"  distance.inactiveGroup="7"
							 angle="90" color="0x000000" left="0" top="0" right="0" bottom="0"/>
	
	<!--- drop shadow can't be hittable so all other graphics go in this group -->
	<s:Group left="0" right="0" top="0" bottom="0">
		
		<!--- top group mask @private-->
		<s:Group left="1" top="1" right="1" bottom="1" id="topGroupMask">
			<!--- @private-->
			<s:Rect id="topMaskRect" left="0" top="0" right="0" bottom="0" >
				<s:fill>
					<s:SolidColor alpha="0"/>
				</s:fill>
			</s:Rect>
		</s:Group>
		
		<!--- bottom group mask @private-->
		<s:Group left="1" top="1" right="1" bottom="1" id="bottomGroupMask" 
				 includeIn="withControls">
			<!--- @private-->
			<s:Rect id="bottomMaskRect" left="0" top="0" right="0" bottom="0">
				<s:fill>
					<s:SolidColor alpha="0"/>
				</s:fill>
			</s:Rect>
		</s:Group>
		
		<!--- layer 1: border @private -->
		<s:Rect id="border" left="0" right="0" top="0" bottom="0" >
			<s:stroke>
				<!--- Defines the TitleWindowSkin class's border stroke. The default value is 1. -->
				<s:SolidColorStroke id="borderStroke" weight="1" />
			</s:stroke>
		</s:Rect>
		
		<!-- layer 2: background fill -->
		<!--- Defines the appearance of the TitleWindowSkin class's background. -->
		<s:Rect id="background" left="1" top="1" right="1" bottom="1">
			<s:fill>
				<!--- Defines the TitleWindowSkin class's background fill. The default color is 0xFFFFFF. -->
				<s:SolidColor id="backgroundFill" color="#FFFFFF"/>
			</s:fill>
		</s:Rect>
		
		<!-- layer 3: contents -->
		<!--- Contains the vertical stack of title bar content and control bar. -->
		<s:Group left="1" right="1" top="1" bottom="1" id="contents">
			<s:layout>
				<s:VerticalLayout gap="0" horizontalAlign="justify" />
			</s:layout>
			<!--- @private -->
			<s:Group id="topGroup" mask="{topGroupMask}">
				
				<!--- layer 0: title bar fill @private -->
				<s:Rect id="tbFill" left="0" right="0" top="0" bottom="1" >
					<s:fill>
						<s:LinearGradient rotation="90">
							<s:GradientEntry color="0x3399CC"
											 color.inactiveGroup="0x99aaaa"/>
							<s:GradientEntry color="0x0066aa"
											 color.inactiveGroup="0x808080"/>
							<!---
							<s:GradientEntry color="0xD2D2D2"
											 color.inactiveGroup="0xEAEAEA"/>
							<s:GradientEntry color="0x9A9A9A"
											 color.inactiveGroup="0xCECECE"/>
							-->
						</s:LinearGradient>
					</s:fill>
				</s:Rect>
				
				<!--- layer 1: title bar highlight @private -->
				<s:Rect id="tbHilite" left="0" right="0" top="0" bottom="0" >
					<s:stroke>
						<s:LinearGradientStroke rotation="90" weight="1">
							<s:GradientEntry color="0xE6E6E6" />
							<s:GradientEntry color="0xFFFFFF" alpha="0.22"/>
						</s:LinearGradientStroke>
					</s:stroke>
					<s:fill>
						<s:LinearGradient rotation="90">
							<s:GradientEntry color="0xFFFFFF" alpha="0.15" />
							<s:GradientEntry color="0xFFFFFF" alpha="0.15" ratio="0.44"/>
							<s:GradientEntry color="0xFFFFFF" alpha="0" ratio="0.4401"/>
						</s:LinearGradient>
					</s:fill>
				</s:Rect>
				
				<!--- layer 2: title bar divider @private -->
				<s:Rect id="tbDiv" left="0" right="0" height="1" bottom="0" >
					<s:fill>
						<s:SolidColor color="0x000000" alpha="0.75" />
					</s:fill>
				</s:Rect>
				
				<!-- layer 3: text -->
				<!--- @copy spark.components.Panel#titleDisplay -->
				<s:Label id="titleDisplay" maxDisplayedLines="1"
						 left="9" right="36" top="1" bottom="0" minHeight="30"
						 verticalAlign="middle" fontWeight="bold" />
				
				<!-- layer 4: moveArea -->
				<!--- @copy spark.components.TitleWindow#moveArea -->
				<s:Group id="moveArea" left="0" right="0" top="0" bottom="0" />
				
				<!--- @copy spark.components.TitleWindow#closeButton 
				<s:Image id="btnMax" toolTip="最大化" source="assets\images\Buttonmaximize.png"
						 width="18" height="18" right="27" top="7"/>
				<s:Image id="btnRestore" visible="false" toolTip="还原" source="assets\images\Buttonrestore.png"
						 width="18" height="18" right="27" top="7"/>
				-->
				<s:Image id="btnMin" toolTip="最小化" source="assets\images\Buttonminimize.png"
						 width="18" height="18" right="27" top="7"/>
				<s:Button id="closeButton" skinClass="spark.skins.spark.TitleWindowCloseButtonSkin"
						  width="15" height="15" right="7" top="7" />
			</s:Group>
			
			<!--
			Note: setting the minimum size to 0 here so that changes to the host component's
			size will not be thwarted by this skin part's minimum size.   This is a compromise,
			more about it here: http://bugs.adobe.com/jira/browse/SDK-21143
			-->
			<!--- @copy spark.components.SkinnableContainer#contentGroup -->
			<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0">
			</s:Group>
			
			<!--- @private -->
			<s:Group id="bottomGroup" minWidth="0" minHeight="0" 
					 includeIn="withControls">  
				
				<s:Group left="0" right="0" top="0" bottom="0" mask="{bottomGroupMask}">
					
					<!-- layer 0: control bar divider line -->
					<s:Rect left="0" right="0" top="0" height="1" alpha="0.22">
						<s:fill>
							<s:SolidColor color="0x000000" />
						</s:fill>
					</s:Rect>
					
					<!-- layer 1: control bar highlight -->
					<s:Rect left="0" right="0" top="1" bottom="0">
						<s:stroke>
							<s:LinearGradientStroke rotation="90" weight="1">
								<s:GradientEntry color="0xFFFFFF" />
								<s:GradientEntry color="0xD8D8D8" />
							</s:LinearGradientStroke>
						</s:stroke>
					</s:Rect>
					
					<!-- layer 2: control bar fill -->
					<s:Rect left="1" right="1" top="2" bottom="1">
						<s:fill>
							<s:LinearGradient rotation="90">
								<s:GradientEntry color="0xEDEDED"/>
								<s:GradientEntry color="0xCDCDCD"/>
							</s:LinearGradient>
						</s:fill>
					</s:Rect>
				</s:Group>
				
				<!--- @copy spark.components.Panel#controlBarGroup -->
				<s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0">
					<s:layout>
						<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" />
					</s:layout>
				</s:Group>
			</s:Group>
		</s:Group>
	</s:Group>
</s:SparkSkin>


分享到:
评论

相关推荐

    前端响应式布局笔记-flex

    本笔记将深入探讨flex布局中的一些关键属性及其应用场景。 一、`display`属性 Flex布局的开启始于设置容器元素的`display`属性。主要有两个值:`flex`和`inline-flex`。`display: flex;`用于块级元素,`display: ...

    flex学习笔记 flex学习总结 flex学习教程

    本教程是作者精心编写的Flex学习资料,适合初学者入门,通过图文并茂的方式,帮助读者快速掌握Flex的基本概念和核心技能。 1. **Flex基础**:Flex提供了MXML和ActionScript两种编程方式。MXML是一种声明式语言,...

    FLEX学习笔记

    《FLEX学习笔记》 FLEX,全称为Flex Builder,是由Adobe公司开发的一款基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建具有交互性、响应性和丰富用户体验的Web应用。FLEX的...

    Flex学习笔记.doc

    Flex学习笔记概述 Flex是一种由Adobe开发的企业级富互联网应用(RIA)的表示层解决方案,其主要目的是提供高度交互和动态的用户体验。Flex的核心在于它的编程语言MXML和ActionScript(AS),这两种语言结合在一起,...

    flex学习笔记

    ### Flex 学习笔记知识点详解 #### 一、Flex 技术概述 - **定义**:Flex 是一种用于构建和部署跨浏览器、跨平台的丰富互联网应用程序 (RIA) 的开源框架。 - **特点**: - 强大的 UI 构建能力:允许开发者创建高度...

    Flex学习笔记1

    Flex学习笔记1 - 容器布局对象状态的切换和数据绑定 在 Flex 应用程序中,容器布局对象状态的切换是非常常见的需求。例如,在购物车应用程序中,我们可能需要在不同的状态之间切换,例如从商品浏览状态到购物车状态...

    Flex 开发学习笔记4 - 应用分页列表组件

    Flex开发学习笔记4主要关注的是如何在Flex应用中实现分页列表组件,这对于构建大型数据展示界面至关重要。Flex是一个开源的、基于ActionScript的框架,用于创建富互联网应用程序(RIA)。在这里,我们不仅会探讨Flex...

    flex学习笔记beginning

    根据给定的文件信息,我们可以提炼出以下关于Flex学习的关键知识点: ### 1. ActionScript 核心概念 #### 1.1 类和对象 (Class and Object) - **定义**:类是对象的抽象,而对象是类的具体实例。一个类定义了对象...

    Flex学习笔记

    这篇“Flex学习笔记”可能是作者在深入研究Flex技术过程中整理的心得体会和实践案例,结合了《Flex3权威指南》这本书的内容。 在Flex中,ActionScript是核心编程语言,它是基于ECMAScript的一个版本,专门针对富...

    Flex学习笔记,入门材料

    ### Flex学习笔记:ActionScript与Flex开发入门 #### 1. ActionScript核心概念 ##### 1.1 类和对象(Class and Object) 类是对象的模板,定义了一组具有相同特性和行为的对象的共同属性和方法。在ActionScript中...

    Ajax学习笔记---3种Ajax的实现方法【推荐】

    2. **Flash / Flex (Adobe) / Silverlight (Microsoft)**:这些是基于浏览器插件的富互联网应用(RIA)技术,提供了与Ajax类似的功能,但它们更侧重于图形和多媒体内容的展示。 ### Ajax解决了什么问题 传统的网页...

    flex 学习详细笔记

    本笔记将深入探讨Flex的基本概念、架构、组件、布局管理器以及事件处理机制,帮助初学者全面理解并掌握Flex开发。 1. **Flex简介**:Flex是一种开放源代码的框架,主要用于创建交互式的、基于Web的用户界面。它允许...

    css网页布局学习笔记

    本学习笔记将深入探讨CSS在网页布局中的应用,帮助读者掌握如何利用CSS创建美观且响应式的网页。 一、CSS基础 在了解网页布局之前,我们需要熟悉CSS的基本语法和选择器。CSS通过选择器来指定要应用样式的HTML元素,...

    flex4.5学习笔记

    ### Flex4.5学习笔记知识点总结 #### 一、Flex基础——布局 **知识点1:Flex布局** - **垂直布局** (`s:VerticalLayout`): 控件垂直排列。 - **水平布局** (`s:HorizontalLayout`): 控件水平排列。 - **平铺布局**...

    前端响应式布局笔记-媒体查询

    响应式布局是现代网页设计的关键技术之一,它使得网站能够适应不同设备的屏幕尺寸和分辨率,提供优秀的用户体验。媒体查询(Media Queries)是实现响应式布局的核心工具,它允许我们根据设备特性,如视口宽度、设备...

    30天用帮助文件学Flex基础-01

    - **学习方式**:边翻译边学习的方式,结合个人理解和思考来进行学习笔记的撰写。 - **版权说明**:尊重原作者的版权,鼓励大家自由复制传播,但需标明原作者信息。 #### 三、Flex编程元素 - **MXML**:一种XML...

Global site tag (gtag.js) - Google Analytics