2011-10-27 3 views
1

私はこのような問題があります。私は、Adobe AIR 2.6とFlash Builder 4.5を使用してAndroid用アプリケーションを作成しています。モバイルデバイスの解像度に応じてリソースを拡張する必要があります。このためには、デバイスの解像度とDPIを知る必要があります。私はそれを得るためにそのようなコードを使用しています:Flash BuilderのAIRシミュレータのデバイス解像度が正しくない

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

このコードをデバイスで実行すると、すべてOKです!すべてのリソースが適切に拡張されました(Nexus One上)。 しかし、私はフラッシュビルダーシミュレータ上の私のdesctopコンピュータ上でそれを実行し、デバイスのGoogle Nexus Oneから選択する必要があります - それは解像度800 * 480が必要ですが、コードで私は実際のサイズ500 * 375を取得します。 私はCapabilitiesクラスを使用しているとき、1024 * 768(私のデスクトップ解像度)を返します。 それで、どうしたの?なぜそれが私に間違ったデバイス解像度を返すのですか?どうすればこの問題を解決できますか? Thanx for help。

+0

私はチェックしました:エアーシミュレーターは、すべてのAndroidデバイスで解像度500 * 375を返しますが、それぞれの解像度は実際の解像度とは異なります(( – yozhik

答えて

6

私はこの問題を解決しました。シミュレータは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

mxmlcコンパイラ(特に-default-sizeオプション)のデフォルト値であるため、幅と高さとして常に500x375が表示される理由があります。詳細はこちらをご覧ください:

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

をあなたが先に(そうである)時間のモバイルデバイスの実際の大きさを知っている限り、あなたはstage.stageHeightをフェッチする前に発射するEvent.RESIZEのを待つ必要があります。 stageオブジェクトでは、Event.RESIZEを聞く必要があります。

関連する問題