Adobe Air‎ > ‎

画面遷移について



画面クラスについて俯瞰してみる


Airの最初の画面は、<mx:WindowedApplication>にて作成します。
WindowedApplicationでは、nativeApplication と nativeWindow, stageの変数が使用できますので、これらのオブジェクトを操作することが可能です。

NativeApplicationは、Airアプリケーション全体を表していて、現在ActiveなWindowを取得したり、WindowMenuやDoc/SystemTrayの設定、アイドルタイムの情報取得、ログイン時に自動起動する設定(startAtLogin)などを行なうことができます。

NativeWindowは画面の描画領域を指していてStageを変数持っています。
Stageはブラウザで実行されるFlashの最上位の描画領域でしたが、Airでは1アプリケーションで複数のStageが存在する形になっています。


どこで画面遷移するかを考えてみる

一つのNativeWindowにて表示オブジェクトを切り替えて画面遷移を実現させるか?
NativeWindowを複数作成して画面遷移させるか? 

の2択の選択をすることになります。

前者の”一つのNativeWindowにて切り替え”する場合

確認ダイアログなど、小さなモーダル画面で入力項目が無い時には、Alertをまず検討します。

あと、TabやAccordion,StackViewのコンポーネントを使う事で要件は満たされるのであればそれを検討していきます。この部分は@IT Flexのリッチな画面遷移テクニックに記述がありますので、こちらをどうぞ。
ただ、StackViewなどで詰め込みすぎるとリソースを大量消費したりするらしいので、気をつける必要はあるみたいです。
この方法の延長上の方法になると思いますが、Stage#addChildで直接表示したいものを追加していくやり方もあるようです。

また、画面内の一部を共通化したい とか 別の開発者触れるように分担したい という場合にはSWFLoaderを画面内に貼付けて、別途作成したSWFを読み込ませるという手法もあるようです。

それ以外の方法としては、TitleWindowを作成してポップアップとして表示する方法になります。
<mx:TitleWindow>をRootにもつMXMLファイルを別途作成し、PopupManager.createPopUpを使って画面表示します。
public static function createPopUp(parent:DisplayObject, className:Class, modal:Boolean = false, childList:String = null):IFlexDisplayObject
第三引数のmodal:Booleanをtrueにするとモーダルになります。
#第四引数の差はよくわかってません。。。

画面を閉じる場合にはPopupManager.removePopupを使います。
このPopup使い方は、TitleWindow:例に記述されているのでこちらをどうぞ。

いずれの方法にしろ、起動元画面のNativeWindowの描画領域を使用するため、描画範囲は起動元画面のサイズ になります。
起動する画面のサイズが大きくなってしまう場合には、起動元画面のサイズも大きくする必要があります。


後者の”NativeWindowを複数作成”する場合

先ほどの、”一つのNativeWindowにて切り替え"する場合は、描画領域が起動元画面サイズになってしまいましたが、こちらの方法だと、全く別の領域に描画領域を作成することになるので、SwingのJFrame,JDialogのように別画面として作り出すことができます。

最初の画面は <mx:WindowedApplication>で作成して、遷移先の画面は<mx:Window>にて起動することができます。
<mx:Window>は、この要素をRootにしたMXMLファイルを別途用意し、new {MXML名}().open() で表示することができます。
画面毎にMXMLファイルを作成できるし、クラスとしては綺麗な構成が作れそうです。
ですが、モーダルとしての表示は出来ないようです。
βの時代では、Window#typeに設定するNativeApplicationTypeNativeWindowType.MODALといいいうのがあったようなのですが、現在は削除されてしまっています。残念。
ですので、モーダルとしての画面を表示したい場合には、元画面を 非表示にする もしくは 使用不可にする ということを実装する必要がありそうです。

また、(気のせいかもしれませんが)mx:Windowはなんか気持ち悪い動きがあるような気もします。
Airで新規に追加されたクラスのようで、そんなに落ち着いていないクラスなのかも。。とも思いますので、気をつけた方がいいかも。

最後になりますが...

これらは、独自に想像した事なので、間違いがあるかも。
もし間違いがあれば指摘してくださいー!
#このサイトのトップにメールアドレスの記述があります。

Comments