Android 如何在操作系统中检测ContextMenu的出现?
我正在使用Gluon开发Android、Iphone(和桌面)上的javafx应用程序。当我将一个测试应用程序导出到我的Android手机(Marshmallow 6.0)时,我无法按住文本来访问可以复制文本的菜单(上下文菜单) (这是一个使用上下文菜单可以做什么的示例,而不是一个如何在Android中复制长保留文本的问题) 在iphone 6上进行测试时,这是可能的Android 如何在操作系统中检测ContextMenu的出现?,android,ios,javafx,gluon,Android,Ios,Javafx,Gluon,我正在使用Gluon开发Android、Iphone(和桌面)上的javafx应用程序。当我将一个测试应用程序导出到我的Android手机(Marshmallow 6.0)时,我无法按住文本来访问可以复制文本的菜单(上下文菜单) (这是一个使用上下文菜单可以做什么的示例,而不是一个如何在Android中复制长保留文本的问题) 在iphone 6上进行测试时,这是可能的 如何在java中检测设备/操作系统是否具有默认上下文菜单?在桌面上,有一个默认的上下文菜单,它是在文本字段行为(专用API)中创
如何在java中检测设备/操作系统是否具有默认上下文菜单?在桌面上,有一个默认的
上下文菜单
,它是在文本字段行为
(专用API)中创建和安装的。如果您没有设置自己的自定义上下文菜单,则将在触发ContextMenuEvent
时使用该菜单(例如,使用右键单击事件)
在移动设备上,Android和iOS都有ContextMenu
在iOS上,它使用本机TextField
(UITextField
)。当长按事件发生时,它会触发默认的上下文菜单(在我的iPad上,我可以看到一个小放大镜,然后上下文菜单就会显示出来)
在安卓系统上,JavaFXTextField
具有自定义外观,但与桌面版本共享相同的私有TextField行为。本例中的问题是缺少将触发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));
});
有关获取设备的上下文菜单
,以及启用长按功能的信息,请参阅此信息。感谢José的可能副本。斯蒂芬只是。。。读标题或我不知道的东西