1: 2018-06-12 (火) 13:06:16 njf[4] [5] [6] | 現: 2018-06-12 (火) 13:54:08 njf[4] [7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
*Adobe AirでAndroidの全画面表示の問題 [#fbb03037] | *Adobe AirでAndroidの全画面表示の問題 [#fbb03037] | ||
+ | |||
+ | Adobe AirでAndroidアプリを製作するとき、Animate CCの「AIR for Android設定」でフルスクリーンモードにしたとき、stage.fullScreenWidthやstage.fullScreenHeightで取得し、それを元にレイアウトすると表示がずれることがあります。 | ||
+ | |||
+ | これはAirで取得できるフルスクリーンのサイズは画面上下(横表示なら上と横)に表示されるAndroidのステータスバーやナビゲーションUIを含んだ画面のサイズだからです。 | ||
+ | |||
+ | このあたりをうまく処理しようとすると、Androidのネイティブな処理が必要となるようなのですが、幸いフルスクリーンモードをうまく扱えるようにしてくれるANEが無料で公開されています。 | ||
+ | |||
+ | [[Full Screen ANE for Adobe AIR:https://github.com/mesmotronic/air-ane-fullscreen]] | ||
+ | |||
+ | このANEの機能でゲームでよく使いそうなものを解説します。 | ||
+ | |||
+ | *Full Screen ANE for Adobe AIR [#vca06985] | ||
+ | |||
+ | **初期化 [#u4e4c227] | ||
+ | |||
+ | まず、app.xmlで | ||
+ | <fullScreen>false</fullScreen> | ||
+ | を定義するか、Animate CCなら「AIR for Android設定」で「フルスクリーンモードにする」のチェックを外します。 | ||
+ | |||
+ | 次に、 | ||
+ | |||
+ | stage.displayState = StageDisplayState.NORMAL; | ||
+ | |||
+ | とします。 | ||
+ | そして、ANEにステージを設定します。 | ||
+ | |||
+ | AndroidFullScreen.stage = stage; | ||
+ | |||
+ | **よく使うモード [#t820c1e6] | ||
+ | ***デバイスで最適のフルスクリーンを実行 [#l9d6531c] | ||
+ | |||
+ | fullScreen()でそのデバイスで一番無難なフルスクリーンモードを実行します。 | ||
+ | |||
+ | AndroidFullScreen.fullScreen(); | ||
+ | |||
+ | 私の手持ちのデバイスでは、ステータスバーやナビゲーションを表示した状態となりました。 | ||
+ | ただし、stage.fullScreenWidthやstage.fullScreenHeightは正しい値が入るようになるので、実行しないよりは使い勝手は良いです。 | ||
+ | |||
+ | ***ステータスバーを消す [#b1521f79] | ||
+ | |||
+ | 上に出るステータスバーを消すには | ||
+ | |||
+ | 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 ); | ||
+ | } | ||
+ | |||
+ | ***ステータスバーおよびナビゲーションも消す [#w91ccc5d] | ||
+ | |||
+ | ステータスバーも下や横に出るナビゲーションも消すには以下のメソッドを使います。 | ||
+ | AndroidFullScreen.leanMode(); | ||
+ | |||
+ | ただし、ナビゲーションが消えるといっても黒いバーは残ります。また、そのバーをタップするとステータスバーやナビゲーションが復帰し、画面の表示領域も変わります。 | ||
+ | |||
+ | よってその場合のレイアウトなども用意する必要があります。 | ||
+ | |||
+ | *まとめ [#ebbbed61] | ||
+ | |||
+ | 個人的にはゲームで使うにはステータスバーだけ消すのが一番便利と思います。また、setSystemUiVisibilityを使えばAndroidで使える画面モードを自由に動的に設定できます。 | ||
+ | |||
+ | 全体についての注意点として、 | ||
+ | -ナビゲーションを消した場合、それを復活させるとレイアウトが変わること | ||
+ | -アプリをバックグラウンドにして復帰すると画面モードが変わることもある | ||
+ | |||
+ | があります。 | ||
+ | そのため、テストは十分に行う必要があります。 |
(This host) = https://njf.jp