AS3 / Adob​​e AIR从Portrait& amp;改为风景变得错误

时间:2013-03-19 17:53:52

标签: actionscript-3 air adobe resolution

我会尽量用有限的英语解释这个问题!

好的,我正在建立一个应用程序,该应用程序将在手机上处于纵向模式和平板电脑的横向模式。 我这样做,首先计算显示尺寸,而不是基本上说"if display size is more than 5 inches, consider this device to be a tablet".

这很有效。我正在使用Adobe Flash CS6和FlashDevelop,因此一旦应用程序启动,我就会将纵向模式作为默认模式。如果设备是平板电脑,则会使用 stage.setAspectRatio(StageAspectRatio.LANDSCAPE)更改宽高比;

这也很有效。 现在,问题是stage.stageWidth不会将其值更改为新的aspectRatio。这是一个简单的修复,只需使用stage.stageHeight作为宽度。但蜂窝/ ics平板电脑/设备上的系统栏不会改变。

对不起的解释感到抱歉,但是让我告诉你一些数字......

这是我在平板电脑上启动应用程序时发生的情况。

  1. 应用程序以Portrait开头。高度= 1232宽度= 800.正如您所看到的,显示分辨率应为1280x720,但无法通过任何命令获得系统的高度。我测试了所有返回分辨率的内容,但没有一个返回完整分辨率(1280x720)。

  2. 现在应用程序变成了横向(因为它是平板电脑)并获得此分辨率高度:800,宽度1232.

  3. 你可以想象这是错的。因为系统板位于底部。分辨率应为高度:752,宽度1280。


    有什么解决方案吗? 我一直在考虑一种解决方法,它基本上会计算出系统工具* 的含义。但在我开始之前,我想知道是否有办法解决这个问题。 *

1 个答案:

答案 0 :(得分:1)

-1。我不知道是否有正式的方法来做这些, 但你的第一个标准听起来与此类似:

link: AS3/AIR: If phone use portrait, if tablet use landscape?

这也解决了某些设备的默认方向是“纵向”但有些设备“风景”的问题

-2。至于屏幕的区域

以下内容应给出设备的像素尺寸:

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;    
stage.fullScreenWidth;
stage.fullScreenHeight;

//import flash.system.Capabilities;
Capabilities.screenResolutionX;
Capabilities.screenResolutionY;

然后使用它(我假设你一直在使用)应该返回可用区域减去状态栏(我读过的帖子提到它对于iPad是正确的但是一些Android平板电脑没有考虑导航栏):

stage.stageWidth;
stage.stageHeight;

然后这个应该给出正确的屏幕分辨率值减去状态栏和导航栏区域:

//import flash.display.Screen
var screenBounds:Rectangle = Screen.mainScreen.visibleBounds;