Неправильное разрешение устройства на AIR simulator во Flash builder

#air #flash-builder

#air #flash-builder

Вопрос:

У меня такая проблема: я пишу приложение для 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 simulator и выбираю из устройств Google Nexus One — оно должно иметь разрешение 800 * 480, но в коде я получаю фактический размер 500 * 375.
Когда я использую класс возможностей, он возвращает мне 1024 * 768 (мое разрешение десктопа).
Итак, что с этим не так? Почему он возвращает мне неправильное разрешение устройства? Как я могу решить эту проблему?
Спасибо за помощь.

Комментарии:

1. Я проверил: air simulator возвращает разрешение 500 * 375 для ВСЕХ устройств Android, но у каждого из них разное реальное разрешение.((

Ответ №1:

Я решил эту проблему. Симулятор возвращает допустимое разрешение экрана симулятора в обработчике события.ИЗМЕНИТЬ размер, это можно сделать следующим образом:

 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();
        }
}
  

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

Ответ №2:

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

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

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