Flex:如何在用户可视区域的中心弹出一个组件?

时间:2011-02-14 18:33:16

标签: flex actionscript-3 popup

假设我有一个尺寸大于用户屏幕分辨率的应用程序。通常,在添加弹出窗口时,我会调用popupManager.addPopup(),然后调用popupManager.centerPopup(),但这可能会导致弹出窗口被添加到用户屏幕上的可见区域之外。

有没有办法在用户的当前可视区域的中间添加弹出窗口?

修改 这是一个简单的例子:

<?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" 
               width="3000" height="2000" 
               creationComplete="creationCompleteHandler(event)">

  <fx:Script>
    <![CDATA[

      import mx.managers.PopUpManager;          
      import spark.components.TitleWindow;

      public var myWindow:TitleWindow = new TitleWindow;

      protected function creationCompleteHandler(event:FlexEvent):void
      {
        myWindow.title = "My Title Window";
        PopUpManager.addPopUp(myWindow, DisplayObject(FlexGlobals.topLevelApplication), false);
        PopUpManager.centerPopUp(myWindow);
      }

    ]]>
  </fx:Script>

  <s:BorderContainer width="3000" height="2000" backgroundColor="0x000000" />
</s:Application>

示例1:

+==========================+---------------------+
|      Viewable Area       |                     |
|                          |                     |
|     +-------------+      |                     |
|     |  I want the |      |                     |
|     |   popup to  |      |                     |
|     |   go here.  |      |                     |
|     +-------------+      |                     |
|                          |                     |
|                          |                     |
+==========================+                     |
|                                                |
|                Rest of Application             |
|                                                |
|                                                |
|                                                |
|                                                |
+------------------------------------------------+

示例2:

+------------------------------------------------+
|                                                |
|                Rest of Application             |
|                                                |
|                                                |
|                +===========================+   |
|                |       Viewable Area       |   |
|                |                           |   |
|                |      +-------------+      |   |
|                |      |  I want the |      |   |
|                |      |   popup to  |      |   |
|                |      |   go here.  |      |   |
|                |      +-------------+      |   |
|                |                           |   |
|                |                           |   |
|                +===========================+   |
|                                                |
+------------------------------------------------+

2 个答案:

答案 0 :(得分:2)

centerPopUp()使用传递给parentaddPopUp()的{​​{1}}对象作为参考,以便对弹出窗口进行居中。如果createPopUp()是应用程序,那么它应该已经基于应用程序的parentwidth进行居中 - 这是“可视区域”从Flex的角度来看。 / p>

因此,尝试将应用程序对象作为height参数传递给parentaddPopUp()

答案 1 :(得分:1)

您可以使用舞台属性的stageWidth和stageHeight属性手动计算:

dlg.x = (this.stage.stageWidth / 2) - (dlg.width / 2);
dlg.y = (this.stage.stageHeight / 2) - (dlg.height / 2);

可能有更“正确”的方式来获取可视区域的尺寸,但我发现这可以完成工作。

希望有所帮助。

编辑:修正了我的错误信息:)