#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
объект.