Codename One 仅在我点击屏幕时关闭弹出对话框
Codename One close PopUp dialog only when I tap the screen
我有一个 Android 带有许多解释性弹出对话框。
我只想在按下对话框内的关闭按钮时关闭那些,而不是在点击对话框外的屏幕时关闭。
我正在使用 setDisposeWhenPointerOutOfBounds
设置为 false,但这似乎只适用于不是弹出式样式的对话框。
有没有办法实现弹出对话框的这种行为?
非常感谢。
这是我的代码:
public void dialogTest () {
Dialog dialog = new Dialog("Test");
dialog.add(new Button ("Test")).add(new Button("TestTwo"));
dialog.setDisposeWhenPointerOutOfBounds(false); // flag is set to false, but dialog closes anyway when I tap on the screen
dialog.showPopupDialog(buttonTest);
}
当您显示 Dialog
(弹出窗口或其他方式)时,其背后的表单不是“真实的”。由于 Dialog
IS A Form
它总是占据整个屏幕。您在后台看到的是之前Form
.
的截图
您感兴趣的是 InteractionDialog
,它也有一个弹出选项。它以不同的方式工作,并允许您与其下方的 Form
进行交互。参见 https://www.codenameone.com/blog/picking-dialog-type.html
@rainer 是的,这是可能的。然而,首先,一个简短的解释。由于我不知道的原因,在第 1176 行的 Dialog.java 文件中,强加了 disposeWhenPointerOutOfBounds = true;
。大家可以自行查看:https://github.com/codenameone/CodenameOne/blob/1ad583bae9e05954c6bff852649d3b6d8264414b/CodenameOne/src/com/codename1/ui/Dialog.java#L1176
这就是 dialog.setDisposeWhenPointerOutOfBounds(false);
对您不起作用的原因,因为它被设计为仅适用于普通对话框,而不适用于对话框弹出窗口。
Javadoc 中也指定了此行为,所以这似乎是一个有意的选择,虽然我不知道为什么,特别是,我不知道 Android 和 [= 之间是否存在差异25=] 在这一点上,因为他们有不同的默认方式来创建弹出对话框(也许问题就在这里)。
说了这么多,解决方法很简单:在模拟器上能用,真机上能不能用我就让你试试。只需以这种方式覆盖 onShow
方法:
Dialog d = new Dialog(new BorderLayout()){
@Override
protected void onShow() {
this.setDisposeWhenPointerOutOfBounds(false);
}
};
[...]
d.showPopupDialog(buttonTest);
我有一个 Android 带有许多解释性弹出对话框。
我只想在按下对话框内的关闭按钮时关闭那些,而不是在点击对话框外的屏幕时关闭。
我正在使用 setDisposeWhenPointerOutOfBounds
设置为 false,但这似乎只适用于不是弹出式样式的对话框。
有没有办法实现弹出对话框的这种行为?
非常感谢。
这是我的代码:
public void dialogTest () {
Dialog dialog = new Dialog("Test");
dialog.add(new Button ("Test")).add(new Button("TestTwo"));
dialog.setDisposeWhenPointerOutOfBounds(false); // flag is set to false, but dialog closes anyway when I tap on the screen
dialog.showPopupDialog(buttonTest);
}
当您显示 Dialog
(弹出窗口或其他方式)时,其背后的表单不是“真实的”。由于 Dialog
IS A Form
它总是占据整个屏幕。您在后台看到的是之前Form
.
您感兴趣的是 InteractionDialog
,它也有一个弹出选项。它以不同的方式工作,并允许您与其下方的 Form
进行交互。参见 https://www.codenameone.com/blog/picking-dialog-type.html
@rainer 是的,这是可能的。然而,首先,一个简短的解释。由于我不知道的原因,在第 1176 行的 Dialog.java 文件中,强加了 disposeWhenPointerOutOfBounds = true;
。大家可以自行查看:https://github.com/codenameone/CodenameOne/blob/1ad583bae9e05954c6bff852649d3b6d8264414b/CodenameOne/src/com/codename1/ui/Dialog.java#L1176
这就是 dialog.setDisposeWhenPointerOutOfBounds(false);
对您不起作用的原因,因为它被设计为仅适用于普通对话框,而不适用于对话框弹出窗口。
Javadoc 中也指定了此行为,所以这似乎是一个有意的选择,虽然我不知道为什么,特别是,我不知道 Android 和 [= 之间是否存在差异25=] 在这一点上,因为他们有不同的默认方式来创建弹出对话框(也许问题就在这里)。
说了这么多,解决方法很简单:在模拟器上能用,真机上能不能用我就让你试试。只需以这种方式覆盖 onShow
方法:
Dialog d = new Dialog(new BorderLayout()){
@Override
protected void onShow() {
this.setDisposeWhenPointerOutOfBounds(false);
}
};
[...]
d.showPopupDialog(buttonTest);