Неправильное разрешение устройства на симуляторе AIR во Flash Builder - PullRequest
1 голос
/ 27 октября 2011

У меня такая проблема: я пишу приложение для Android, используя Adobe AIR 2.6 и Flash Builder 4.5. Мне нужно масштабировать свои ресурсы в зависимости от разрешения мобильного устройства. Для этого мне нужно знать разрешение устройства и DPI. Я использую такой код, чтобы получить его:

PlatformUtil.init(mainView.stage.stageWidth, mainView.stage.stageHeight, 
                Capabilities.screenDPI, mainView);

Когда я запускаю этот код на устройстве - все ок! Все ресурсы правильно масштабированы (на Nexus One). Но когда я запускаю его на своем компьютере desctop на симуляторе Flash Builder и выбираю из устройств Google Nexus One - он должен иметь разрешение 800 * 480, но в коде я получаю фактический размер 500 * 375. Когда я использую класс Capabilities, он возвращает мне 1024 * 768 (мое разрешение desctop). Так что с ним не так? Почему возвращается неверное разрешение устройства? Как я могу решить эту проблему? Спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 27 октября 2011

Я решил эту проблему. Симулятор возвращает действительное разрешение экрана симулятора в обработчике Event.RESIZE, это можно сделать так:

public class Main extends Sprite
    {       
        public function Main()
        {
            super();

            //register to add to stage
            this.stage.addEventListener(Event.RESIZE, onResize);
            this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            // support autoOrients
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
        }

        private function onAddedToStage(event:Event):void
        {
            this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }

        private function onResize(event:Event):void
        {
            this.stage.removeEventListener(Event.RESIZE, onResize);

            //width must be bigger then height, because we in landscape mode
            var w:int = Math.max(this.stage.stageWidth, this.stage.stageHeight);
            var h:int = Math.min(this.stage.stageWidth, this.stage.stageHeight);

            //draw black background
            with( graphics ) 
            {
                beginFill(0x0)
                drawRect(0,0,w,h);
            }

            init();
        }
}

Надеюсь, это поможет кому-то вроде меня.

3 голосов
/ 28 апреля 2012

Причина, по которой вы всегда видите ширину и высоту 500x375, заключается в том, что это значения по умолчанию для компилятора mxmlc (в частности, опция -default-size). Подробности смотрите здесь:

http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_13.html

Если вы заранее не знаете фактические размеры мобильного устройства (что маловероятно), вам придется дождаться срабатывания Event.RESIZE, чтобы получить stage.stageHeight. Вы должны слушать Event.RESIZE на объекте stage.

...