Flex includeIn (состояние topLevelApplication) - PullRequest
1 голос
/ 26 февраля 2012

В мобильном приложении Flex мой компонент приложения обрабатывает такие состояния, как портрет / пейзаж ios / android и телефон / планшет в группах. В моем представлении я хочу включить кнопку, если основное приложение имеет одно из этих состояний. Я не хочу, чтобы какой-либо View проверял portroit / landscape и все снова устанавливал как собственное состояние. С другой стороны, состояния представлений требуются для других вещей. Так как же я могу включить кнопку в моем представлении, только если состояние topLevelApplication является горизонтальным, например ??1001*

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Используйте атрибут includein = "landscape", если он присутствует в нескольких состояниях, вы можете поместить список через запятую

1 голос
/ 02 апреля 2012

Прежде всего добавьте два состояния к вашему приложению:

<s:states>
    <s:State name="portrait"/>
    <s:State name="landscape"/>
</s:states>

Затем добавьте следующую функцию в ваш <fx:Script> раздел:

<fx:Script>
    <![CDATA[
        import mx.events.ResizeEvent;

        protected function application1_resizeHandler(event:ResizeEvent):void
        {
            if (width>height)
                this.currentState="landscape";
            else this.currentState="portrait";
        }
    ]]>
</fx:Script>

Также вызовите метод выше для приложения resize :

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160" resize="application1_resizeHandler(event)">

Теперь, если вы хотите включить или исключить компонент, просто добавьте visible или includeIn на нужный компонент:

visible.landscape="false"

или

includeIn="landscape"

Полный пример кода:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       resize="application1_resizeHandler(event)">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <s:states>
        <s:State name="portrait"/>
        <s:State name="landscape"/>
    </s:states>

    <fx:Script>
        <![CDATA[
            import mx.events.ResizeEvent;

            protected function application1_resizeHandler(event:ResizeEvent):void
            {
                if (width>height)
                    this.currentState="landscape";
                else this.currentState="portrait";
            }
        ]]>
    </fx:Script>
    <s:Button includeIn="landscape" x="58" y="52" label="Landscape"/>
    <s:Button includeIn="portrait" x="58" y="90" label="Portrait"/>

</s:WindowedApplication>
...