在我们的 Flex AIR 应用程序中,我们的应用程序主窗口相当窄。这意味着警报对话框的两边都被切掉了,而右键菜单被裁剪了。我们怎样才能让这些窗口不被我们的主窗口裁剪?
4 回答
将您的主 AIR 窗口变成一个不可见的透明窗口,并使您的应用程序的主要工作窗口成为不可见窗口的子窗口。然后,当您的 AIR 应用程序启动时,将不可见窗口设置为包含桌面的大小。然后,您将能够在此桌面区域上放置任意数量的窗口和对话框,而不必担心它们会像现在发生的那样被剪裁。
如果您想支持多屏幕显示 - 以便您的可见应用程序窗口可以从一个显示到另一个显示,那么将您的不可见窗口设置为整个图形坐标系的大小,以便它包含任何和所有显示屏幕。
一旦采用了不可见窗口的方法,您将能够实现类似于原生应用程序的窗口行为。
你如何显示警报?如果您使用 Alert.show(),它将使用默认宽度。但是,您可以通过创建警报对象、手动(甚至动态地)设置宽度,然后使用 PopUpManager 显示它、将其放置在您想要的位置并隐藏它来解决此问题。它需要更多的代码,但会给你更多的灵活性。
这是一个小样本:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationCompleteHandler();">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
private function creationCompleteHandler():void
{
var alert:Alert = new Alert();
alert.width = 100;
alert.text = "this Alert is\n100px wide";
PopUpManager.addPopUp(alert, this);
PopUpManager.centerPopUp(alert);
Alert.show("this Alert uses the default width");
}
]]>
</mx:Script>
</mx:WindowedApplication>
在 Flash 播放器内部运行 flex 应用程序时,无法在舞台外显示窗口。因此,完成这项工作的唯一方法是让您的应用程序更大。
虽然您可以使用 flex/ajax 桥并调用 javascript 警报框,但它们不会受到舞台的约束。但它不会像应用程序的其他部分那样被蒙皮,并且需要更多的工作才能上钩,特别是如果你正在听用户点击确定按钮......
我相信 adobe air 的 dojo 扩展应该能够满足您的需求。我自己从来没有使用过它,也不确定会有什么权衡,但它可能值得一看。