如何在OS中检测ContextMenu的出现?

时间:2017-09-15 16:00:26

标签: android ios javafx gluon

我使用Gluon开发适用于Android,Iphone(和桌面)的javafx应用程序。当我将测试应用程序导出到我的Android手机(Marshmallow 6.0)时 - 我无法按住文本来访问可以复制文本的菜单(上下文菜单) (这是您可以使用上下文菜单执行操作的示例 - 并且不是如何在Android中专门复制文本的问题)

在iphone 6上进行测试时,这是可能的。

如何在java中检测到设备/操作系统是否有默认的上下文菜单?

1 个答案:

答案 0 :(得分:2)

在桌面上,默认ContextMenu是在TextFieldBehavior(私有API)中创建和安装的。如果您没有设置自己的自定义上下文菜单,则会触发ContextMenuEvent时使用的菜单(例如右键单击事件)。

在移动设备上,Android和iOS 都有} ContextMenu

在iOS上,它使用原生TextFieldUITextField)。当长按事件发生时,它会触发默认的上下文菜单(在我的iPad上我可以看到一个小放大镜,然后显示上下文菜单)。

在Android上,JavaFX TextField具有自定义外观,但与桌面版本共享相同的私有TextFieldBehavior。这种情况下的问题是缺少会触发ContextMenuEvent事件的右键单击事件。

这就是您必须手动触发ContextMenuEvent事件的原因,正如此question中所述。

结论:到目前为止,这基本上仅在Android上需要:

TextField textField = new TextField();

addPressAndHoldHandler(textField, Duration.seconds(1), event -> {
        Bounds bounds = textField.localToScreen(textField.getBoundsInLocal());
        textField.fireEvent(new ContextMenuEvent(ContextMenuEvent.CONTEXT_MENU_REQUESTED, 
                0, 0, bounds.getMinX() + 10, bounds.getMaxY() + 10, false, null));
    });