Flex4 全屏 焦点 Halo INavigatorContent 异常 creationPolicy="none"

Flex4 全屏 焦点 Halo INavigatorContent 错误 creationPolicy="none"

1 .Flex4中全屏:

  • 在页面中(比方头部页面)中添加creationComplete事件处理:creationComplete="init();"

 

[Bindable]
private var fullScreenBtnLabel:String = "全屏";

private function init():void{
	stage.addEventListener(FullScreenEvent.FULL_SCREEN,function(event:FullScreenEvent):void {
		fullScreenBtnLabel = event.fullScreen ? "普通" : "全屏";
	});
}
 
  • 页面中添加button:

 

<mx:LinkButton label="{fullScreenBtnLabel}"  click="changeScreen(event)" textDecoration="underline"/>
 
  • button 单击事件处理:

 

private function changeScreen(event:MouseEvent):void{
	stage.displayState = stage.displayState == StageDisplayState.FULL_SCREEN ? StageDisplayState.NORMAL : StageDisplayState.FULL_SCREEN;
}

 

完成,这样就可以实现页面在“全屏”和“普通”之间切换了。

 

注意: (1).flex3 中使用mx.core.Application.application.stage.displayState=StageDisplayState.FULL_SCREEN;来实现全屏的切换。

(2) 全屏时,不能使用键盘。

 

 

2. 默认情况下,在使用Flex生成的包装html来访问swf文件时,即使在页面的creationComplete事件中使用focusManager.setFocu让某个输入框获得焦点,但由于整个swf没有获取焦点,也是无法在页面载入完成时直接输入的。 解决方法:修改工程目录下的html-template\index.template.html,在<head>标签中添加onload事件

<script type="text/javascript">
function doload() {
    try {
	document.getElementById('${application}').focus();
	document.getElementById('${application}').select();
    } catch (ex) {
    }
}
</script>

<!--  ---------- html ----------- -->

<body onload="doload()">
 

3. ViewStack中报 “Halo 导航器的子代必须实现 INavigatorContent。”错误。

解决方法:嵌套一层NavigatorContent

 

4. ViewStack中creationPolicy="none"时,手动创建组件:

  mainViewStack.createComponentFromDescriptor(mainViewStack.childDescriptors[index],false);
  mainViewStack.validateNow();

 

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<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" creationComplete="init();">
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>

	<fx:Script>
		<![CDATA[
			import mx.core.INavigatorContent;
			import mx.core.UIComponent;
			private function init():void {
				selectChildViewByIndex(panel1,0);
			}
			//创建ViewStack中的子View并显示
			private function selectChildViewByIndex(view:UIComponent,index:int):void {
				if(view == null){
					mainViewStack.createComponentFromDescriptor(mainViewStack.childDescriptors[index],false);
					mainViewStack.validateNow();
				}
				mainViewStack.selectedIndex = index;
			}
			
		]]>
	</fx:Script>
	
	<mx:ViewStack id="mainViewStack" creationPolicy="none">
		<s:NavigatorContent>
			<s:Panel id="panel1" title="panel1"/>
		</s:NavigatorContent>
		<s:NavigatorContent>
			<s:Panel id="panel2" title="panel2"/>
		</s:NavigatorContent>
		<s:NavigatorContent>
			<s:Panel id="panel3" title="panel3"/>
		</s:NavigatorContent>
	</mx:ViewStack>
	
	<s:HGroup>
		<s:Button label="show panel1" click="selectChildViewByIndex(panel1,0)"/>
		<s:Button label="show panel2" click="selectChildViewByIndex(panel2,1)"/>
		<s:Button label="show panel3" click="selectChildViewByIndex(panel3,2)"/>
	</s:HGroup>
	
</s:Application>