Adob​​e Air - 移动宽度和高度

问题描述:

我写了我的第一个移动AIR应用程序。在我的iPad上,布局是一个令人沮丧的失败。它在Flash Builder模拟器中看起来很完美。Adob​​e Air - 移动宽度和高度

我有应用程序设置为在纵向模式下运行,没有自动方向。它从160 DPI开始并扩大。当应用程序完成时,我得到舞台的宽度和高度,然后使用这些数字计算我的数据网格中所有按钮和列宽的布局。当我在iPad上加载应用程序时,所有按钮都分散得太远,有几个按钮离开了屏幕。数据网格都应该适合在屏幕上,但有四列从屏幕上跑出来。

这几乎就像在横向模式下而不是在纵向模式下计算屏幕的宽度一样。所以我有两个问题:

1)如果你纵向布局应用程序,舞台的宽度是纵向还是横向?

2)我很困惑如何将各种屏幕密度的移动设备放在一起。获取应用宽度和高度,然后以像素为单位设置距离和间距,或使用百分比,会更好吗?

感谢您的任何见解。这令人失望。

编辑: 当应用程序完成后,我派遣一个自定义事件让我的其余部件知道,应用程序加载,这样他们就可以获取应用程序的宽度和高度,奠定自己出适当。我主要的应用程序,我有这样的代码:

protected function appCreationCompleteHandler(event:FlexEvent):void { 
    // Dispatch an event to the rest of the application that the application is complete so that I can calculate all of my layout distances 
    var e:Event = new Event("appComplete", true); 
    dispatchEvent(e); 
    appWidth = stage.stageWidth; 
    appHeight = stage.stageHeight; 
} 

在我的应用程序描述符文件,我有以下值设置:

<aspectRatio>portrait</aspectRatio> 

<autoOrients>false</autoOrients> 
<fullScreen>true</fullScreen> 
<visible>true</visible> 
<softKeyboardBehavior>pan</softKeyboardBehavior> 

我觉得它有什么东西在我的描述符文件,因为它在模拟器中完美布置,而不是在设备上。设备上的高度值似乎是正确的,但宽度布局只是关闭。

问题可能是screenWidth和screenHeight仍然会返回真实的宽度和高度,但由于您将DPI设置为固定值,实际可见区域比此更小?

您可以使用Capabilities.screenDPI重新计算实际大小,但问题是它在很多设备上非常不可靠(意味着它返回错误的DPI)。

尝试获取宽度和高度与屏幕类:

var screen:Screen = Screen.getScreensForRectangle(stage.nativeWindow.bounds)[0]; 
var width:int = screen.visibleBounds.width; 
var height:int= screen.visibleBounds.height; 
+0

我编辑我的帖子了一些信息。我将应用程序的宽度和高度追溯到标签组件,并显示了1536x2048,这对我的iPad是正确的。我实际上没有基于160DPI计算任何东西,这只是您在设置AIR移动项目时选择的值。缩放会自动发生。我根据舞台的宽度和高度来计算一切,看起来正确。我觉得这只是描述符文件中的一个基本设置,我不知道,因为数学基于我目前所拥有的信息进行检查。 – sax

我终于得到它的工作。由于我选中了160DPI的应用程序,因此我计算的每个距离或宽度都是AIR的缩放比例。所以如果我根据舞台的宽度来计算间距,但是舞台DPI大于160,那么我计算的答案将会被缩放。所以我最终把我所有的按钮放在宽度基于百分比的组中。通过这种方式,我并不需要考虑每个设备的扩展和计算,AIR会为我做很大的工作。