有人能在Flex SDK 4.6中正确使用吗?
这是一个简短的片段:
<?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"
addedToStage="onAddedToStage(event)"
title="Title">
<fx:Script>
<![CDATA[
private function onAddedToStage(event:Event):void {
if (stage.autoOrients) {
stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChanging, false, 0, true);
}
}
private function orientationChanging(event:StageOrientationEvent):void {
if (event.afterOrientation == StageOrientation.DEFAULT || event.afterOrientation == StageOrientation.UPSIDE_DOWN) {
event.preventDefault();
}
}
]]>
</fx:Script>
</s:View>
我想要实现的是在横屏模式下支持两种方向,所以如果用户将设备旋转180度,屏幕也应该旋转。但是当用户将设备旋转到其中一种纵向方向时,不应有任何动作。相反,在纵向方向上,我看到导航器操作栏的宽度发生变化,有时内容也会变化。所以显然仅仅阻止事件是不够的。我正在使用Adobe建议的“官方”方式,但问题是它并不能很好地工作。诚然,舞台没有改变,但似乎导航器中仍然有某些触发事件,因为你可以看到操作栏的宽度在变化。
在处理程序方法中明确设置布局边界为固定宽度后,我取得了一些成功-这可以防止更改操作栏宽度,但这只是一个临时解决方案-如果视图受到过渡或其他重绘的影响,它将重新以错误的大小呈现。好像下面有东西告诉它处于纵向模式,尽管我试图阻止它。
在你提出一些愚蠢的想法,比如“autoOrient = false”之前,请不要。显然这不是解决这个问题的方法。很明显这是Flex SDK的一个错误-有人找到了修复它或稳定的解决方法吗?
编辑:显然,其他人也遇到了类似的问题:
- http://forums.adobe.com/message/3969531(主题是关于其他事情,但请阅读magic robots 的评论)
- http://forums.adobe.com/message/4130972