在Flex mobile中开发时如何区分手机和平板电脑?

时间:2012-11-02 20:33:35

标签: flex flex4 flex4.5 flex4.6 flex-mobile

我在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模拟器时,结果仍然不太好看:

enter image description here

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

enter image description here

这里有什么用于检测手机与平板电脑设备的内容?

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

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:3)

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

基本上,我做了这个

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

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

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

if ( deviceWidth >= fireWidth && deviceHeight >= fireHeight ) {
    isTablet = true;
}
else {
    isPhone = true;
}
显然,这是伪代码,但你明白了。我还投入了一些检查以区分每个平台(iOS,Android和桌面),如果是iOS,我手动设置它是平板电脑还是手机,因为那里的设备领域有限。

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

可能不是应该怎么做,也不是傻瓜证明。不幸的是,据我所知,这是我们最接近Adobe AIR中具有特定于设备的接口的通用应用程序。