在AIR编写的Android/iOS程序中控制设备方向

2012-07-13更新:加入iOS设备测试。

怎样在使用AIR编写的Android程序中控制设备的方向呢?

例如有一款游戏,希望无论在平板电脑上,还是在手机中,都以竖屏(垂直方向)的方式启动,而且无论如何都不可能横屏。我们可以这样设置:

在应用程序描述符中,将autoOrients设置为true,将aspectRatio设置为portrait。

在应用程序描述符中,将autoOrients设置为false,将aspectRatio设置为portrait。

在Android平台上,将autoOrients设置为true或者false,是同样的效果。而在iOS平台上,必须将autoOrients设置为false才能得到上面的效果。

本文测试平台:

  • Android手机:Moto Atrix 2,Android 2.3.6
  • Android平板:Acer Iconia Tab A500,Androd 4.0.3
  • iOS手机:iPhone 4
  • iOS平板:iPad 2
  • AIR版本:3.3

下表中描述了autoOrients和aspectRatio这两个值的所有组合状态,以及手机的“锁定旋转”功能对它们的影响(这活儿相当苦逼……)。

平台 autoOrients aspectRatio 表现 锁定功能
Android true portrait 启动后转到垂直方向 无效
Android true landscape 启动后转到水平方向 无效
Android true any 启动后转到设备的当前方向 有效
Android true 不设置 启动后转到设备的当前方向 有效
Android false portrait 启动后转到垂直方向 无效
Android false landscape 启动后转到水平方向 无效
Android false any 启动后转到设备的当前方向 不确定
Android false 不设置 启动后转到设备的默认方向 无效
iOS false portrait 启动后转到垂直方向 无效
iOS true portrait 启动后转到设备的当前方向 有效
iOS false landscape 启动后转到水平方向 无效
iOS true landscape 启动后转到设备的当前方向 有效

名词解释:

  • 垂直方向:设备的长边垂直于地面的方向;
  • 水平方向:设备的短边垂直于地面的方向;
  • 当前方向:设备当前的方向,取决于你怎么拿它;
  • 默认方向:对于平板电脑来说,水平方向是默认方向,手机则相反;
  • 锁定功能无效:无论是否开启锁定,都不会影响程序的方向;
  • 锁定功能有效:参见上一句;
  • 锁定功能不确定:这个比较坑爹,在我的平板上时有时无;但对于作出这种搭配( autoOrients=false,aspectRatio=any)的程序员,我只能说两个字:你相当手贱

有点标题党了,说是控制设备方向,其实只是控制设备的初始方向而已。

如果在运行时要控制设备的方向,在stage的方法中找找吧……

参考:http://blogs.adobe.com/airodynamics/2012/05/22/stage-aspectratio-enhancements/