我会尽量用有限的英语解释这个问题!
好的,我正在建立一个应用程序,该应用程序将在手机上处于纵向模式和平板电脑的横向模式。
我这样做,首先计算显示尺寸,而不是基本上说"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平板电脑/设备上的系统栏不会改变。
对不起的解释感到抱歉,但是让我告诉你一些数字......
这是我在平板电脑上启动应用程序时发生的情况。
应用程序以Portrait开头。高度= 1232宽度= 800.正如您所看到的,显示分辨率应为1280x720,但无法通过任何命令获得系统的高度。我测试了所有返回分辨率的内容,但没有一个返回完整分辨率(1280x720)。
现在应用程序变成了横向(因为它是平板电脑)并获得此分辨率高度:800,宽度1232.
你可以想象这是错的。因为系统板位于底部。分辨率应为高度:752,宽度1280。
有什么解决方案吗? 我一直在考虑一种解决方法,它基本上会计算出系统工具* 的含义。但在我开始之前,我想知道是否有办法解决这个问题。 *
答案 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;