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>