Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在操作系统中检测ContextMenu的出现?_Android_Ios_Javafx_Gluon - Fatal编程技术网

Android 如何在操作系统中检测ContextMenu的出现?

Android 如何在操作系统中检测ContextMenu的出现?,android,ios,javafx,gluon,Android,Ios,Javafx,Gluon,我正在使用Gluon开发Android、Iphone(和桌面)上的javafx应用程序。当我将一个测试应用程序导出到我的Android手机(Marshmallow 6.0)时,我无法按住文本来访问可以复制文本的菜单(上下文菜单) (这是一个使用上下文菜单可以做什么的示例,而不是一个如何在Android中复制长保留文本的问题) 在iphone 6上进行测试时,这是可能的 如何在java中检测设备/操作系统是否具有默认上下文菜单?在桌面上,有一个默认的上下文菜单,它是在文本字段行为(专用API)中创

我正在使用Gluon开发Android、Iphone(和桌面)上的javafx应用程序。当我将一个测试应用程序导出到我的Android手机(Marshmallow 6.0)时,我无法按住文本来访问可以复制文本的菜单(上下文菜单) (这是一个使用上下文菜单可以做什么的示例,而不是一个如何在Android中复制长保留文本的问题)

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


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

在桌面上,有一个默认的
上下文菜单
,它是在
文本字段行为
(专用API)中创建和安装的。如果您没有设置自己的自定义上下文菜单,则将在触发
ContextMenuEvent
时使用该菜单(例如,使用右键单击事件)

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

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

在安卓系统上,JavaFX
TextField
具有自定义外观,但与桌面版本共享相同的私有
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é的可能副本。斯蒂芬只是。。。读标题或我不知道的东西