【问题标题】:Adobe AIR bring to frontAdobe AIR 脱颖而出
【发布时间】:2014-01-24 11:29:24
【问题描述】:

我有一个 adobe AIR 应用程序。当我从网页通过本地连接发送一些数据时,我希望应用程序位于浏览器和所有其他窗口的前面。

我尝试了 activate() 和 orderToFront(),但没有结果。

唯一有效的脚本是:

window.alwaysInFront=true;

window.alwaysInFront=false;

但这并没有将重点放在应用程序上。所以当我点击浏览器上的按钮时,我的应用程序在顶部,但是如果我点击浏览器,应用程序会一直保持在顶部,直到我点击它(给它焦点),然后我再次点击浏览器窗口.如果我单击浏览器顶部栏,它工作正常。 我认为 activate() 可以解决将焦点放在应用程序上的问题,但不起作用。

这里是代码(我也使用原生窗口来调整、最小化和最大化窗口)。我从本地连接调用的函数是“primopiano”

import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.MovieClip;

import flash.display.NativeWindow;

var window = stage.nativeWindow;

function trascina (event:MouseEvent) {
    window.startMove();
}
...

function primoPiano (event) {
    trace("porto in primo piano...");
    //window.activate(); // doesn't work
    //window.orderToFront(); // doesn't work

    window.alwaysInFront=true;
    window.alwaysInFront=false;
}

我是否忘记导入某些内容,或者我必须定义一个不同的窗口来执行此操作?

谢谢! 娜迪亚

【问题讨论】:

    标签: actionscript-3 air


    【解决方案1】:

    看看DocumentationAPI Reference

    AIR 提供了几种直接改变窗口显示顺序的方法。您可以将窗口移动到显示顺序的前面或后面;您可以将一个窗口移到另一个窗口上方或后面。同时,用户可以通过激活窗口来重新排序窗口。

    您可以通过将其 alwaysInFront 属性设置为 true 来保持一个窗口位于其他窗口的前面。如果多个窗口具有此设置,则这些窗口的显示顺序将相互排序,但它们始终排在 alwaysInFront 设置为 false 的窗口之上。即使 AIR 应用程序未处于活动状态,最顶层组中的窗口也会显示在其他应用程序的窗口上方。由于此行为可能会对用户造成干扰,因此仅应在必要且适当的情况下将 alwaysInFront 设置为 true。合理使用的示例包括:

    • 工具提示、弹出列表、自定义菜单或组合框等控件的临时弹出窗口。因为这些窗口在失去焦点时应该关闭,所以可以避免阻止用户查看另一个窗口的烦恼。
    • 极其紧急的错误消息和警报。如果用户没有及时响应,可能会发生不可撤销的更改,那么将警报窗口推到最前面可能是合理的。但是,大多数错误和警报都可以按照正常的窗口显示顺序进行处理。
    • 短寿命吐司式窗口。

    注意:AIR 不强制正确使用 alwaysInFront 属性。但是,如果您的应用程序中断了用户的工作流程,它很可能会被丢到同一用户的垃圾桶中。

    我试过了:

    window.alwaysInFront = true;
    window.alwaysInFront = false;
    window.activate();
    

    您也可以尝试在窗口舞台上引用显示对象:

    displayObject.stage.nativeWindow.alwaysInFront=true; 
    //(where displayObject is your instance name)
    

    并且工作正常。我正在使用 Adob​​e AIR 4

    【讨论】:

    • 谢谢,不过我已经试过了,好像window.activate();没有结果,没有焦点。
    • 嘿@Nadia,我刚刚用另一个例子编辑了我的答案,希望对你有所帮助
    • alwaysinFront 对我来说也很好用,它把窗口放在前面,但没有把重点放在它上面。这就是为什么我尝试使用 activate();并且不起作用。尝试了您的 displayObject.stage.nativeWindow.activate() 并没有任何变化... AIR 2(要编译,播放器是 4.0.0.139)
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2012-03-17
    • 2023-03-09
    相关资源
    最近更新 更多