Как отличить телефоны от планшетов при разработке в Flex mobile?

Я использую applicationDPI в мобильной карточной игре Flex:

<?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>

И все же результат выглядит не очень хорошо, когда я, например, выбираю эмулятор iPad в Flash Builder 4.6:

введите здесь описание изображения

При выборе Google Nexus One результат лучше:

введите здесь описание изображения

Что здесь делать, что использовать для определения телефона и планшета?

Проверка разрешения экрана здесь не поможет — см. приведенный выше пример iPad (низкое разрешение, но большой экран).


person Alexander Farber    schedule 02.11.2012    source источник
comment
Не использовал Flex для мобильных устройств, но мне нужно Возможности может предоставить некоторую полезную информацию, например os,screenResolutionX,screenResolutionY,screenDPI   -  person George Profenza    schedule 03.11.2012
comment
Спасибо, но вопрос в том, на что обратить внимание, например, при сравнении iPad и Google Nexus One? (см. скриншоты выше)   -  person Alexander Farber    schedule 03.11.2012
comment
Установка ApplicationDPI вручную вызывает несколько странных проблем; Настоятельно не рекомендую его устанавливать. Кроме того, я лично считаю, что код, связанный с DPI, можно тестировать только на устройствах; эмулятор вернет DPI экрана [обычно 72; Я думаю]. Я рекомендую определять размер и расположение ваших элементов — в данном случае карточек — в зависимости от доступного вам пространства.   -  person JeffryHouser    schedule 03.11.2012


Ответы (1)


Для проекта, который я сделал для работы, мне пришлось оценить ту же самую проблему. Для этого я создал новый класс, запускаемый при инициализации приложения, который будет оценивать устройство и принимать некоторые решения.

По сути, я сделал это

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, я вручную устанавливал, был ли это планшет или телефон, потому что там есть ограниченное количество устройств.

Оттуда у меня было два интерфейса. Один для телефонов, другой для планшетов. В функции addedToStage для моего класса Application я использовал проверки isPhone и isTablet, чтобы выбрать, какой интерфейс загружать.

Вероятно, это не так, как это должно быть сделано, и это не является надежным. К сожалению, насколько мне известно, это самое близкое к универсальному приложению с интерфейсами для конкретных устройств в Adobe AIR.

person Josh    schedule 02.11.2012
comment
+1; это круто; есть шанс, что вы можете поделиться своим полным классом? Держу пари, это было бы полезно для многих людей. (Бонусные баллы, если вы можете пожертвовать их Apache Flex). - person JeffryHouser; 03.11.2012
comment
Извините, я не могу. Он был построен для коммерческого проекта. Я могу попытаться собрать еще один, основанный на тех же концепциях, в эти выходные, если у меня будет такая возможность. - person Josh; 03.11.2012