我使用Gluon开发适用于Android,Iphone(和桌面)的javafx应用程序。当我将测试应用程序导出到我的Android手机(Marshmallow 6.0)时 - 我无法按住文本来访问可以复制文本的菜单(上下文菜单) (这是您可以使用上下文菜单执行操作的示例 - 并且不是如何在Android中专门复制文本的问题)。
在iphone 6上进行测试时,这是可能的。
如何在java中检测到设备/操作系统是否有默认的上下文菜单?
答案 0 :(得分:2)
在桌面上,默认ContextMenu
是在TextFieldBehavior
(私有API)中创建和安装的。如果您没有设置自己的自定义上下文菜单,则会触发ContextMenuEvent
时使用的菜单(例如右键单击事件)。
在移动设备上,Android和iOS 都有1>} ContextMenu
。
在iOS上,它使用原生TextField
(UITextField
)。当长按事件发生时,它会触发默认的上下文菜单(在我的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));
});