2

我在 Flex 移动纸牌游戏中使用applicationDPI :

<?xml version="1.0" encoding="utf-8"?>
<s:ViewNavigatorApplication 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark"
    firstView="views.Menu"
    applicationDPI="160"
    initialize="init()">

    <fx:Style source="Preferans.css" />

    <fx:Script>
        <![CDATA[
            import spark.core.ContentCache;
            public static const AVATAR_CACHE:ContentCache = new ContentCache();

            public static var SCALE:Number;

            public function init():void {
                SCALE = runtimeDPI / applicationDPI;
            }   
        ]]> 
    </fx:Script>
</s:ViewNavigatorApplication>

并在此基础上提供 3 种不同分辨率的资产:

<fx:Declarations>
    <s:MultiDPIBitmapSource id="BACK"
        source160dpi="@Embed('assets/icons/low-res/back.png')"
        source240dpi="@Embed('assets/icons/mid-res/back.png')"
        source320dpi="@Embed('assets/icons/high-res/back.png')"/>
</fx:Declarations>

结果仍然看起来不太好,例如,当我在 Flash Builder 4.6 中选择 iPad 模拟器时:

在此处输入图像描述

虽然选择 Google Nexus One 会产生更好的结果:

在此处输入图像描述

在这里做什么,用什么来检测手机和平板设备?

检查屏幕分辨率在这里没有帮助 - 请参阅上面的 iPad 示例(低分辨率,但大屏幕)。

4

2 回答 2

6
  public static function get isTablet():Boolean  
    { 

       var deviceWidth:Number = Capabilities.screenResolutionX / Capabilities.screenDPI;

       var deviceHeight:Number = Capabilities.screenResolutionY / Capabilities.screenDPI;

       var diagonalInches:Number = Math.sqrt((deviceWidth * deviceWidth)+ (deviceHeight *    deviceHeight));
      if(diagonalInches>=7)
          return true;
      else
          return false;
    }
于 2013-07-18T09:13:15.450 回答
3

对于我为工作所做的项目,我必须评估完全相同的问题。为此,我创建了一个在 app init 上运行的新类,它将评估设备并做出一些决定。

本质上,我这样做了

var deviceWidth:Number = Capabilities.screenResolutionX / Capabilities.screenDPI;
var deviceHeight:Number = Capabilities.screenResolutionY / Capabilities.screenDPI;

这将为您提供大多数设备上的设备宽度和高度。然而,screenDPI 属性并不总是准确的,因此这不会 100% 起作用。但是,它经常起作用,我认为这不是问题。

从那里,我做了一些研究。我发现手机不再是手机,而是开始成为平板电脑。没有标准的方法,所以我选择了我能找到的最小的流行平板电脑(当时是黑莓 Playbook 或 Kindle Fire,不记得是哪个),并使用屏幕的尺寸作为手机和平板电脑之间的断点。

if ( deviceWidth >= fireWidth && deviceHeight >= fireHeight ) {
    isTablet = true;
}
else {
    isPhone = true;
}

这显然是伪代码,但你明白了。我还进行了一些检查以区分每个平台(iOS、Android 和桌面),如果是 iOS,我手动设置它是平板电脑还是手机,因为那里的设备领域有限。

从那里,我有两个接口。一种用于手机,一种用于平板电脑。在addedToStage 我的 Application 类的函数中,我使用isPhoneisTablet检查来选择要加载的接口。

可能不是它应该如何完成,也不是万无一失的。不幸的是,据我所知,这是我们在 Adob​​e AIR 中最接近具有设备特定接口的通用应用程序。

于 2012-11-02T22:46:55.587 回答