如何检测 OS 中 ContextMenu 的出现?
How to detect occurence of ContextMenu in OS?
我正在使用 Gluon 将 javafx 应用程序开发到 Android、Iphone(以及桌面)。当我将测试应用程序导出到我的 Android phone (Marshmallow 6.0) - 我无法按住文本访问可以复制文本的菜单(上下文菜单)
(这是您可以使用上下文菜单执行的操作的示例 - 而不是在 Android 中如何复制长按文本的问题).
在 iphone 6 上进行测试时,这是可能的。
如何检测 device/operating 系统在 java 中是否有默认上下文菜单?
在桌面上有一个默认的 ContextMenu
创建并安装在 TextFieldBehavior
中(私有 API)。如果您不设置自己的自定义上下文菜单,那将是触发 ContextMenuEvent
时使用的菜单(例如右键单击事件)。
在移动设备上,Android 和 iOS 都有 和 ContextMenu
。
在 iOS 上,它使用原生 TextField
(UITextField
)。当长按事件发生时,它会触发默认的上下文菜单(在我的 iPad 上我可以看到一个小放大镜,然后显示上下文菜单)。
在 Android 上,JavaFX TextField
具有自定义外观,但与桌面版本共享相同的私有 TextFieldBehavior
。本例中的问题是缺少会触发 ContextMenuEvent
事件的右键单击事件。
这就是为什么您必须手动触发 ContextMenuEvent
事件,如 中所述。
结论:到目前为止,这基本上只需要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));
});
我正在使用 Gluon 将 javafx 应用程序开发到 Android、Iphone(以及桌面)。当我将测试应用程序导出到我的 Android phone (Marshmallow 6.0) - 我无法按住文本访问可以复制文本的菜单(上下文菜单) (这是您可以使用上下文菜单执行的操作的示例 - 而不是在 Android 中如何复制长按文本的问题).
在 iphone 6 上进行测试时,这是可能的。
如何检测 device/operating 系统在 java 中是否有默认上下文菜单?
在桌面上有一个默认的 ContextMenu
创建并安装在 TextFieldBehavior
中(私有 API)。如果您不设置自己的自定义上下文菜单,那将是触发 ContextMenuEvent
时使用的菜单(例如右键单击事件)。
在移动设备上,Android 和 iOS 都有 和 ContextMenu
。
在 iOS 上,它使用原生 TextField
(UITextField
)。当长按事件发生时,它会触发默认的上下文菜单(在我的 iPad 上我可以看到一个小放大镜,然后显示上下文菜单)。
在 Android 上,JavaFX TextField
具有自定义外观,但与桌面版本共享相同的私有 TextFieldBehavior
。本例中的问题是缺少会触发 ContextMenuEvent
事件的右键单击事件。
这就是为什么您必须手动触发 ContextMenuEvent
事件,如
结论:到目前为止,这基本上只需要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));
});