0

.mxml で状態を定義できることがわかっています。問題は、アプリケーションまたはコンポーネントが常にこれらの状態の 1 つにしかならないということです。

Flex Mobile のプログラミングでは、コントロール/コンポーネント/要素が[非表示]、[無効/有効]、または特定の色で陰影付けされているかどうかを簡単に定義するために、ランドスケープとポートレート (向き) を状態にする必要があることがよくあります。ただし、アプリまたはコンポーネントには、SufficientCredit や InsufficientCredit など、画面の向きに依存しない他の状態もあります。

状態が SufficientCredit の場合にのみ送信ボタンを表示したいとします。ただし、携帯電話の向きを変更するときは、他のコントロールを表示/非表示/色付けする必要もあります。実際には、クレジットの状態は実際には SufficientCredit ですが、アプリの状態は Portrait または Landscape になっています。InsufficientCredit 状態ではありませんが、送信ボタンが表示されなくなります。

LandscapeSufficientCredit、LandscapeInsufficientCredit、PortraitSufficientCredit、PortraitInsufficientCredit のように「結合」する状態を作成したくありません。また、状態を完全に捨てて、コンポーネントのプロパティ (色、サイズ、可視性など) を変更するためのコードを各ブランチに含める必要がある膨大な if-else ステートメントを作成し、多くの場所からそれを呼び出すことを忘れないようにしたくもありません。それは状態を変えるでしょう。

国家グループについては聞いたことがありますが、それらのドキュメントは非常に紛らわしく、この場合に役立つかどうかわかりません。

4

2 に答える 2

0

2つの状態が同時に必要な場合、それらの状態は独立したパラメーターに影響を与えると思います(画面の向きと色は独立していると思います)。

その場合、特定の親の状態を監視して内部で処理するいくつかの子コンポーネントを作成する必要がある場合があります。

その場合、継承されたスタイルで実装することもできます。親コンポーネントで setStyle("Credit","Insufficient") を呼び出すと、それらのスタイルを知っているすべての子はそれに応じて表現を変更します。

于 2012-12-04T13:39:51.417 に答える
0

StateGroups があなたの答えです。次のようなことができます。

<s:State name="portrait" group="portraitStates"/>
<s:State name="landscape" group="landscapeStates"/>
<s:State name="portraitState1" group="portraitStates, state1States"/>
<s:State name="landscapeState1" group="landscapeStates, state1States"/>
<s:State name="portraitState2" group="portraitStates, state2States"/>
<s:State name="landscapeState2" group="landscapeStates, state2States"/>

次に、ビューで getCurrentState() メソッドをオーバーライドして状態を判断します。そのような

override public function getCurrentViewState():String
{
    var aspect:String = FlexGlobals.topLevelApplication.aspectRatio; //gets landscape/portrait
    //some logic to determine current state
    return aspect+currentState;
} 

私はこれを行って、携帯電話/タブレットの横向き/縦向き + 複数の状態をすべて 1 つのビューにまとめました。

于 2012-12-28T19:42:24.463 に答える