android - 如何检测操作系统中上下文菜单的出现?

标签 android ios javafx gluon

我使用 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/

相关文章:

java - 如何在 JavaFX ChoiceBox 中显示默认选择

android - 如何使用 Retrofit 1.9 从下面的响应中获取图像?

ios - JSON 和 Xcode 6 UITableView

ios - 单例实现。阻止外部使用的 alloc 和 init 方法

ios - 如何使用 swift 将对象数组保存到 NSUserDefault?

java - 动态 TableView 填充。错误 -"duplicate children added"。从数据库添加行时。适用于单行,失败多行

android - 如何使用 PouchDB 安全地连接到 Cloudant?

java - 如何在RecyclerView Adapter类中初始化正确的TextView?

除主 Activity 之外的所有 Activity 中的 Android 操作栏

JavaFX - 使用 Shape.union() 后维护形状边框