假设我有一个尺寸大于用户屏幕分辨率的应用程序。通常,在添加弹出窗口时,我会调用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. | | |
| | +-------------+ | |
| | | |
| | | |
| +===========================+ |
| |
+------------------------------------------------+
答案 0 :(得分:2)
centerPopUp()
使用传递给parent
或addPopUp()
的{{1}}对象作为参考,以便对弹出窗口进行居中。如果createPopUp()
是应用程序,那么它应该已经基于应用程序的parent
和width
进行居中 - 这是“可视区域”从Flex的角度来看。 / p>
因此,尝试将应用程序对象作为height
参数传递给parent
或addPopUp()
答案 1 :(得分:1)
您可以使用舞台属性的stageWidth和stageHeight属性手动计算:
dlg.x = (this.stage.stageWidth / 2) - (dlg.width / 2);
dlg.y = (this.stage.stageHeight / 2) - (dlg.height / 2);
可能有更“正确”的方式来获取可视区域的尺寸,但我发现这可以完成工作。
希望有所帮助。
编辑:修正了我的错误信息:)