我使用 Gluon 为 Android、Iphone(和桌面)开发 javafx 应用程序。当我将测试应用程序导出到我的 Android 手机 (Marshmallow 6.0) 时 - 我无法按住文本以访问可以从中复制文本的菜单(上下文菜单) (这是您可以使用上下文菜单执行的操作的示例 - 而不是专门在 Android 中如何复制长按文本的问题)。
在 iphone 6 上测试时这是可能的。
如何在 java 中检测设备/操作系统是否具有默认上下文菜单?
最佳答案
在桌面上有一个默认的 ContextMenu
,它是在 TextFieldBehavior
(私有(private) API)中创建和安装的。如果您不设置自己的自定义上下文菜单,则将在触发 ContextMenuEvent
时使用该菜单(例如,使用右键单击事件)。
在移动设备上,Android 和 iOS 都有 ContextMenu
。
在 iOS 上,它使用原生的 TextField
(UITextField
)。当长按事件发生时,它会触发默认的上下文菜单(在我的 iPad 上我可以看到一个小放大镜,然后显示上下文菜单)。
在 Android 上,JavaFX TextField
具有自定义外观,但与桌面版本共享相同的私有(private) 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));
});
关于android - 如何检测操作系统中上下文菜单的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46243564/