1

使用 AIR 3.1 并使用(桌面 AIR)模拟器和 Nook 平板电脑(运行 Android 2.3)进行测试。

我正在使用下面的代码来添加一个模态弹出窗口……</p>

PopUpManager.addPopUp( popUp, FlexGlobals.topLevelApplication as DisplayObject, true );

对于 AIR 的 Web 和桌面版本,上述代码可防止模式弹出窗口下方/后面的按钮或其他东西可点击。但是,在 AIR 移动设备上,可以在模式阻止程序后面单击按钮。

我还尝试通过将 100% 宽度/高度 UIComponent 添加到顶级应用程序然后在其上显示我的弹出窗口来创建自己的模式阻止程序。我在“阻塞器”UIComponent 的图形对象中绘制了一个部分透明的矩形,然后向它添加了一个 MouseEvent.CLICK 侦听器,如下所示:

blocker.addEventListener( MouseEvent.CLICK, onMouseClick, true, int.MAX_VALUE );

// Then my handler looked like this
private function onMouseClick( event:Event ):void {
    event.stopImmediatePropagation();
}

我尝试了 TRUE 和 FALSE 的 useCapture 值,但我在 Nook 上看到的行为保持不变。我能够单击模态阻止程序下方的按钮。

我在这里想念什么?我忽略了什么明显的东西?

4

1 回答 1

2

您可以尝试向舞台添加 Mouse_Down 或单击侦听器,然后如果目标不是您的弹出窗口的后代,则停止它的传播。

stage.addEventListener(MouseEvent.CLICK,blockClick,true,int.MAX_VALUE,true);

function blockClick(e:MouseEvent):void {
    var curTarget:DisplayObject = e.target as DisplayObject;

    while(curTarget){
        if(curTarget == popup) return;
        curTarget = curTarget.parent;
    }

    e.stopImmediatePropagation();
}
于 2012-08-20T18:03:24.753 回答