Adobe AirでAndroidアプリを製作するとき、Animate CCの「AIR for Android設定」でフルスクリーンモードにしたとき、stage.fullScreenWidth[3]やstage.fullScreenHeight[4]で取得し、それを元にレイアウトすると表示がずれることがあります。
これはAirで取得できるフルスクリーンのサイズは画面上下(横表示なら上と横)に表示されるAndroidのステータスバーやナビゲーションUIを含んだ画面のサイズだからです。
このあたりをうまく処理しようとすると、Androidのネイティブな処理が必要となるようなのですが、幸いフルスクリーンモードをうまく扱えるようにしてくれるANEが無料で公開されています。
Full Screen ANE for Adobe AIR[5]
このANEの機能でゲームでよく使いそうなものを解説します。
まず、app.xmlで
<fullScreen>false</fullScreen>
を定義するか、Animate CCなら「AIR for Android設定」で「フルスクリーンモードにする」のチェックを外します。
次に、
stage.displayState = StageDisplayState.NORMAL;
とします。 そして、ANEにステージを設定します。
AndroidFullScreen.stage = stage;
fullScreen()でそのデバイスで一番無難なフルスクリーンモードを実行します。
AndroidFullScreen.fullScreen();
私の手持ちのデバイスでは、ステータスバーやナビゲーションを表示した状態となりました。 ただし、stage.fullScreenWidth[3]やstage.fullScreenHeight[4]は正しい値が入るようになるので、実行しないよりは使い勝手は良いです。
上に出るステータスバーを消すには
AndroidFullScreen.setSystemUiVisibility(AndroidFullScreen.SYSTEM_UI_FLAG_FULLSCREEN );
とします。ゲームでは一番使いやすいモードです。 ただし、アプリをバックグラウンドに回して再びフォアグラウンドにすると、ステータスバーが出てしまうようです。そのため、フォアグラウンドに回ったときに再び実行する必要があります。
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, onActivateHandler);
private function onActivateHandler(e:Event):void { AndroidFullScreen.setSystemUiVisibility(AndroidFullScreen.SYSTEM_UI_FLAG_FULLSCREEN ); }
(This host) = https://njf.jp