1

いくつかのUI要素を備えたFlexがあり、 (ダイアログ)s:Groupを含むアプリ内のすべてのコンポーネントの上に常に(!)あるようにしたいです。s:TitleWindowFlex 4でそれを達成するにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

3

mx.managers.PopUpManagerクラスを使用する必要があります。これは、他のどのコンテンツよりも上に表示されるコンテンツを処理するためのシンプルなインターフェイスを提供します。

インターフェースをカプセル化する独自のインターフェースを作成してPopUpManager、背後に表示されるはずの別のポップアップを追加した場合でも、すべての「常に最上位」のコンポーネントを再び最上位に戻す機会を与えることができます。

簡単な例:

public final class AlwaysOnTopPopUpManager {

    private static var alwaysOnTopDisplayObjects:Array;

    public static function addAlwaysOnTopObject(displayObject:IFlexDisplayObject):void
    {
        alwaysOnTopDisplayObjects = alwaysOnTopDisplayObjects || [];

        if (alwaysOnTopDisplayObjects.indexOf(displayObject) == -1)
        {
            alwaysOnTopDisplayObjects.push(displayObject);
            arrange();
        }
    }


    public static function removeAlwaysOnTopObject(displayObject:IFlexDisplayObject):void
    {
        if (alwaysOnTopDisplayObjects)
        {
            var index:int = alwaysOnTopDisplayObjects.indexOf(displayObject);

            if (index != -1)
            {
                alwaysOnTopDisplayObjects.splice(index, 1);
            }
        }
    }


    // uses the same interface as mx.managers.PopUpManager
    public static function addPopUp(window:IFlexDisplayObject, parent:DisplayObject, modal:Boolean = false, childList:String = null, moduleFactory:IFlexModuleFactory = null):void
    {
        mx.managers.PopUpManager.addPopUp(window, parent, modal, childList, moduleFactory);
        arrange();
    }


    private static function arrange():void
    {
        for each (var popup:IFlexDisplayObject in alwaysOnTopDisplayObjects)
        {
            mx.managers.PopUpManager.bringToFront(popup);
        }
    }

このクラスは、他のコンテンツの上に表示されるオブジェクトのリストを保持します。オブジェクトがそのリストまたはポップアップに追加されるたびに、arrange()メソッドが呼び出され、登録されているすべてのオブジェクトが再び前面に表示されます。

于 2013-03-07T02:12:50.950 に答える
2

アプリケーションcreationCompleteイベントの後に、systemManager.rawChildrenに最上位のコンポーネントを追加します。下を参照してください:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               creationComplete="application_creationCompleteHandler(event)"
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            import mx.core.UIComponent;
            import mx.events.CloseEvent;
            import mx.events.FlexEvent;
            import mx.managers.PopUpManager;

            protected function application_creationCompleteHandler(event:FlexEvent):void
            {
                panel.width = width;
                panel.height = 300;
                systemManager.rawChildren.addChild(panel);
            }

            protected function addPopup():void
            {
                PopUpManager.addPopUp(titleWin, this, true);
                PopUpManager.centerPopUp(titleWin);
            }

            protected function button_clickHandler(event:MouseEvent):void
            {
                addPopup();
            }

            protected function titleWin_closeHandler(evt:CloseEvent):void 
            {
                PopUpManager.removePopUp(evt.currentTarget as UIComponent);
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <s:Panel id="panel" backgroundColor="0x00ff00" alpha="0.9" title="Panel">
            <s:layout>
                <s:VerticalLayout paddingLeft="50" horizontalAlign="left" verticalAlign="middle" />
            </s:layout>
            <s:Button id="btn" width="200" height="100" label="create popup" 
                      click="button_clickHandler(event)" /> 
        </s:Panel>

        <s:TitleWindow id="titleWin"
                       title="Spark TitleWindow"
                       close="titleWin_closeHandler(event);"
                       width="300">
            <s:layout>
                <s:VerticalLayout paddingLeft="10" paddingRight="10"
                                  paddingTop="10" paddingBottom="10" />
            </s:layout>
            <s:Label text="Popup window"
                     fontSize="24"
                     width="100%"/>
        </s:TitleWindow>
    </fx:Declarations>
</s:Application>
于 2013-03-07T09:27:19.597 に答える
0

すべての要素が同じMXMLファイルにある場合s:Groupは、ファイルの最後の要素として要素をファイルの最後に配置するだけです。

ビューがより動的に配線されている場合は、次のようにインデックスを強制できます。

var topIndex:int = myParentView.numChildren - 1;
myParentView.setChildIndex(myGroupElement, topIndex);

あなたまたはそのIDmyGroupElementへの参照の場合。s:Group

myGroupElementmyParentViewこのコードが実行されるときの子である必要があります。

要素がたまにしか表示されない場合s:Groupは、sに興味があるかもしれませんPopup

于 2013-03-06T22:55:03.097 に答える