AS3/Adobe AIR 从纵向开始并更改为横向变得错误



我会尽量用有限的英语解释清楚!

好的,我正在构建一个应用程序,将在手机上的纵向模式和平板电脑上的横向模式。我首先通过计算显示尺寸而不是输入"if display size is more than 5 inches, consider this device to be a tablet".

这个效果很好。我使用的是带有FlashDevelop的adobeflashcs6,所以一旦应用程序启动,我就将肖像模式作为默认设置。如果设备是平板电脑,它会使用stage.setAspectRatio(StageAspectRatio.LANDSCAPE);

改变宽高比

这也很有效。现在,问题是这个阶段。stageWidth不会将其值更改为新的aspectRatio。这是一个简单的解决方案,只需使用阶段。stageHeight表示宽度。但是honeycomb/ics平板电脑/设备的系统栏不会改变。

很抱歉解释得不好,但让我用一些数字给你看…

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

  1. 应用程序开始与肖像。高度= 1232,宽度= 800。正如您所看到的,显示分辨率应该是1280x720,但是没有办法通过任何命令获得系统栏的高度。我已经测试了所有返回分辨率的东西,它们都没有返回完整的分辨率(1280x720)。

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

你可以想象这是错误的。因为系统栏在底部。分辨率应为:高:752,宽:1280。


是否有解决方案?我一直在想一个解决方案,将基本上计算什么系统栏*应该是。但在我开始之前,我想知道是否有办法解决这个问题*

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

link: AS3/AIR:如果手机使用纵向,如果平板电脑使用横向?

这也解决了一些设备的默认方向是"纵向"而有些设备是"横向"的问题

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;

最新更新