移动设备屏幕具有不同的屏幕密度或 DPI(每英寸点数)。您可以将 DPI 值指定为 160、240 或 320,具体取决于目标设备的屏幕密度。当您启用自动缩放时,Flex 会针对每个设备的屏幕密度优化其显示应用程序的方式。
例如,假设您将目标 DPI 值指定为 160 并启用自动缩放。当您在 DPI 值为 320 的设备上运行应用程序时,Flex 会自动将应用程序缩放 2 倍。也就是说,Flex 会将所有内容放大 200%。
要指定目标 DPI 值,请将其设置为主应用程序文件中标记或标记的 applicationDPI 属性:
<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
firstView="views.HomeView"
applicationDPI="160">
如果您选择不自动缩放应用程序,则必须根据需要手动处理布局的密度变化。
设备可以有不同的屏幕尺寸或分辨率以及不同的 DPI 值或密度。
分辨率是高像素数乘以宽像素数:即设备支持的总像素数。
DPI 是每平方英寸的点数:即设备屏幕上的像素密度。术语 DPI 可与 PPI(每英寸像素数)互换使用。
applicationDPI(如果已设置)指定应用程序的目标 DPI。Flex 会自动应用比例因子以很好地适应具有不同 DPI 值的其他设备。
Capabilities.screenDPI 是当前设备的具体 DPI 值。
runtimeDPI 类似于 Capabilities.screenDPI。此值是当前设备 DPI,四舍五入为 DPIClassification 类定义的常量之一(160、240 和 320 DPI)。
如果您想知道当前屏幕上组件的实际尺寸(宽度和高度),您需要使用比例因子:
var scaleFactor:Number = runtimeDPI / applicationDPI;
var currentComponentSize:int =componentSize.height * scaleFactor;
如果您无法访问 applicationDPI 和 runtimeDPI 值,则可以使用 Capabilities.screenDPI 手动计算 scaleFactor,如下所示:
// Copy the applicationDPI setted in your application. ie:
var _applicationDPI:int = 160;
var _runtimeDPI:int;
if(Capabilities.screenDPI < 200)
_runtimeDPI = 160;
else if(Capabilities.screenDPI >=200 && Capabilities.screenDPI < 280)
_runtimeDPI = 240
else if (Capabilities.screenDPI >=280)
_runtimeDPI = 320;
var scaleFactor:Number = _runtimeDPI / _applicationDPI;
var currentComponentSize:int =componentSize.height * scaleFactor;
http://www.francescoflorio.info/?p=234