我有一个AIR应用程序,希望将其锁定为横向模式。我永远不希望应用程序旋转到纵向模式。Adobe似乎推荐的解决方案是将我的*-app.xml文件配置如下:
<!-- The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device -->
<aspectRatio>landscape</aspectRatio>
<!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
<autoOrients>false</autoOrients>
这通常是有效的,但并非总是如此。例如,在某些 Android 版本(例如:2.x,适用于 Nook Tablet)中,当 Flash Builder 打包并部署我的 APK 时,如果我的设备屏幕关闭,应用程序将以半破损状态启动,其中其宽高比为横向,但所有尺寸都已经按纵向测量。在其他设备上,例如我的 Google Nexus(Android 4.1),应用程序可以正确启动(横向模式),但如果我关闭屏幕,将设备旋转至纵向模式,然后再次打开屏幕,则我的 AIR 应用程序会被隐性旋转回到纵向模式。更糟糕的是,没有 StageOrientationEvent.ORIENTATION_CHANGE 事件被分派来指示发生了这种情况。
我尝试了一种以上方法的变体,即通过编程方式设置设备方向:
private function onAddedToStage( event:Event ):void {
stage.autoOrients = false;
stage.setOrientation( StageOrientation.ROTATED_RIGHT );
}
这种方法存在上述提到的同样问题。我还尝试了这个Stack Overflow线程中提到的方法。与其禁用自动定向,我尝试监听StageOrientationEvent.ORIENTATION_CHANGE并防止设备进入纵向模式:
private function onAddedToStage( event:Event ):void {
stage.addEventListener( StageOrientationEvent.ORIENTATION_CHANGE, onStageOrientationChange, true, int.MAX_VALUE );
}
private function onStageOrientationChange( event:StageOrientationEvent ):void {
switch( event.afterOrientation ) {
case StageOrientation.DEFAULT:
case StageOrientation.UPSIDE_DOWN:
case StageOrientation.UNKNOWN:
event.preventDefault();
break;
case StageOrientation.ROTATED_RIGHT:
case StageOrientation.ROTATED_LEFT:
break;
}
}
这似乎只在某些情况下起作用。在许多情况下,使用event.preventDefault()无效,应用程序仍然会旋转。
那么,我想问其他的AIR开发人员:是否有可靠的方法可以将设备锁定为单一方向?
Event.RESIZE
事件的舞台和NativeApplication
中的Event.ACTIVATE
事件。(b) 检查height > width
,如果是,则调用stage.setOrientation( StageOrientation.ROTATED_RIGHT );
在我知道这种方法是否真正稳定之前,需要进行更多测试(在更多设备上)。 - bvaughn