1

我会尽量用有限的英语解释这一点!

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

这很好用。我将 Adob​​e Flash CS6 与 FlashDevelop 一起使用,因此一旦应用程序启动,我就会将纵向模式设为默认模式。如果设备是平板电脑,它会使用stage.setAspectRatio(StageAspectRatio.LANDSCAPE);

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

抱歉解释不好,但让我告诉你一些数字......

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

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

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

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


有什么解决办法吗?我一直在考虑一种解决方法,它基本上可以计算出 systembar *应该是什么。但在我开始之前,我想知道是否有任何方法可以解决这个问题。*

4

1 回答 1

1

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

链接: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;
于 2013-04-20T21:03:21.767 回答