flex 4 - 保持元素/组件始终在顶部

Posted

技术标签:

【中文标题】flex 4 - 保持元素/组件始终在顶部【英文标题】:flex 4 - keeping an element/component always on top 【发布时间】:2012-03-18 17:03:54 【问题描述】:

我在 flex 4 应用程序中放置了两个自定义组件

<preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
<util:Debug  top ="0" right="0" id="debug"/>

根据 MXML 中添加的顺序组件,Debug 将保持在最前面。

我的意图是始终将 Debug 组件保持在顶部

PreLoader 组件具有初始化应用程序的所有逻辑,包括一些类的实例化,其中实习生具有向应用程序添加一些其他元素的逻辑(如下所示)

   FlexGlobals.topLevelApplication,addElement(someotherflexcomp);

现在,每次我添加一个元素时,flex/AS 的正常行为是新添加的元素将停留在显示列表的顶部。

所以我在主应用程序中编写了一个函数,当组件/元素添加到主应用程序时需要调用它。

       public function bringDebuggerFront():void

            if (numElements > 2)

                swapElementsAt(numElements - 1,numElements - 2);
            
        

这里的想法是直截了当的,将最后 Nth(last element) 元素的显示位置与 N-1 个元素交换,如果每次添加元素时都调用该元素,则该元素将成为 Debug 组件。

所以,我需要添加一个额外的行来像这样重新定位调试器寡妇

    FlexGlobals.topLevelApplication,addElement(someotherflexcomp);
    FlexGlobals.topLevelApplication.bringDebuggerFront();

暂时不是什么大问题,因为目前我在运行时只添加了三个组件,但将来我可能会添加更多,而且更多,我将不得不工作更多(注释或删除分散在多个地方的代码) 禁用此功能,该功能仅用于调试。

为了避免这种情况,我附加了 add 事件侦听器,假设在我向应用程序添加元素时会调用它,但似乎只为我拥有的两个组件调用它在 mxml 中添加,但在使用 addElement() 方法将元素添加到应用程序时不会调用

这是我的主应用程序的完整代码

<?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" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:util="util.*" xmlns:preload="preload.*"
               add="bringDebuggerFront()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
    <util:Debug  top ="0" right="0" id="debug"/>
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            public function bringDebuggerFront():void

                if (numElements > 2)

                    swapElementsAt(numElements - 1,numElements - 2);
                
            
        ]]>
    </fx:Script>
</s:Application>

我什至也尝试了 added 事件,但我认为这是不正确的,因为它触发了很多次,我假设每次添加内部显示对象都会调用它,并且还会给出错误,我没有深入细节

提前感谢您的帮助

【问题讨论】:

为什么不使用 addElementAt,避免交换? 这也是一个不错的选择,但我需要编写额外的代码来获取 numChildren。我选择 Eduarado 的建议。谢谢 【参考方案1】:

如果您使用的是 Flex 4,则可以通过组件的 depth 属性来实现这一点

【讨论】:

太棒了,对于菜鸟来说很难记住几十个属性。我已经设置了深度=“100”,效果很好

以上是关于flex 4 - 保持元素/组件始终在顶部的主要内容,如果未能解决你的问题,请参考以下文章

flex容器内的居中元素正在增长并溢出顶部[重复]

修复了滚动列表顶部的标题。所有列高度相同的 Flex 布局

在 IQKeyboardManager 中始终保持视图位于顶部(不要使用键盘滚动)

文本小部件始终保持在顶部并且在我滚动时不会消失

在整个应用程序中始终保持 UIView 处于顶部

在相邻组件之间共享内容,HOC?