当前位置: > > > Flex手机项目 - 是内容适应舞台尺寸,方向

Flex手机项目 - 是内容适应舞台尺寸,方向

由于不同的adroid,iphone设置的分辨率不同,Flex开发的移动应用如果要做到界面自适应可以进行如下操作:
1,如果应用支持手机横屏,纵屏的切换。则需要监听Event.ADDED_TO_STAGE以及StageOrientationEvent.ORIENTATION_CHANGE事件,当屏幕发生旋转的时候会触发该事件。

2,然后比较stageObj.stageWidthstageObj.stageHeight的值即可判断出是横屏还是纵屏来设置currentState,同时界面上的组件布局使用Group,更具不同的state来设置是横向布局还是纵向布局。

下面是一个简单的例子:


代码如下:
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
				 xmlns:s="library://ns.adobe.com/flex/spark"
				 actionBarVisible="false" 
				 creationComplete="onCreationComplete()"
				 tabBarVisible="false" 
				 title="Home">

	<fx:Declarations>
		<s:State name="portrait" />
		<s:State name="landscape" />
	</fx:Declarations>
	
	<fx:Script>
		<![CDATA[
			private static const BLUE:int = 0x3399FF;
			private static const GREEN:int = 0x99CC00;
			private static const RED:int = 0xFF3333;
			private static const YELLOW:int = 0xFFCC00;
			
			private function onCreationComplete():void
			{
				this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			}
			
			private function onAddedToStage(e:Event):void
			{
				stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
				sizeComponents(systemManager.screen.width, systemManager.screen.height);
			}
			
			public function onOrientationChange(e:StageOrientationEvent):void      
			{       	
				sizeComponents(systemManager.screen.width, systemManager.screen.height);
			}
			
			protected function sizeComponents(stageWidth:int, stageHeight:int):void
			{      
				if(stageWidth < stageHeight)
				{
					currentState = "portrait";
					
					a.width = stageWidth/2;      
					a.height = 1/3 * stageHeight;      
					       
					b.width = stageWidth/2;      
					b.height = 1/3 * stageHeight; 
					       
					c.width = stageWidth;      
					c.height = stageHeight - (1/3 * stageHeight) - (1/6 * stageHeight);      
					   
					d.width = stageWidth;      
					d.height = 1/6 * stageHeight; 
					
				} else if(stageWidth > stageHeight) {
					 
					currentState = "landscape";
					
					a.width = stageWidth/2;      
					a.height = stageHeight/2 - (1/6 * stageHeight)/2;      
					       
					b.width = stageWidth/2;      
					b.height = stageHeight/2 - (1/6 * stageHeight)/2;
					       
					c.width = stageWidth/2;      
					c.height = stageHeight - (1/6 * stageHeight);      
					       
					d.width = stageWidth;      
					d.height = 1/6 * stageHeight; 
					
				}
			}
		]]>
		
		
	</fx:Script>
	
	<s:Group>
		
		<s:layout.portrait>
			<s:VerticalLayout gap="0" />
		</s:layout.portrait>
		
		<s:layout.landscape>
			<s:VerticalLayout  gap="0" />
		</s:layout.landscape>
		
		<s:Group>
		
			<s:layout.portrait>
				<s:VerticalLayout gap="0" />
			</s:layout.portrait>
			
			<s:layout.landscape>
				<s:HorizontalLayout gap="0" />
			</s:layout.landscape>
		
			<s:Group>
			
				<s:layout.landscape>
					<s:VerticalLayout gap="0" />
				</s:layout.landscape>
				
				<s:layout.portrait>
				      <s:HorizontalLayout gap="0" />
				</s:layout.portrait>
						
					<s:Graphic>    
						<s:Rect id="a">
							<s:fill>
								<s:SolidColor color="{BLUE}"/>
							</s:fill>
						</s:Rect> 
					</s:Graphic>
					
					<s:Graphic>    
						<s:Rect id="b">
							<s:fill>
								<s:SolidColor color="{GREEN}"/>
							</s:fill>
						</s:Rect>
					</s:Graphic>
				  
			</s:Group>					

			<s:Graphic>    
				<s:Rect id="c">
					<s:fill>
						<s:SolidColor color="{YELLOW}"/>
					</s:fill>
				</s:Rect> 
			</s:Graphic>
	
			</s:Group>
		
			<s:Graphic>    
					<s:Rect id="d">
						<s:fill>
							<s:SolidColor color="{RED}"/>
						</s:fill>
					</s:Rect>
			</s:Graphic>
		
	</s:Group>
		
</s:View>
评论0