【问题标题】:How to enable JavaFX virtual keyboard in android using JavaFXPorts如何使用 JavaFXPorts 在 android 中启用 JavaFX 虚拟键盘
【发布时间】:2018-10-05 06:25:23
【问题描述】:

我已在桌面应用程序上启用 JavaFX 虚拟键盘(通过传递虚拟机参数)。但是,当使用 JavaFXPorts 移植到 android 应用程序时,JavaFX 虚拟键盘在 android 中不可见,这显示了 android 的本机键盘。我试图通过注释行传递 jvm 参数(在运行 gdradlew android 时),但它不起作用。我还尝试在文本字段集中时调用 FXVK.init(textField); FXVK.attach(textField); 方法。但是这些都没有显示 JavaFX 虚拟键盘,它只显示 android 本机键盘。

【问题讨论】:

标签: java android javafx javafx-8 javafxports


【解决方案1】:

在 Android 上使用 JavaFXPorts,如果您尝试打印:

Platform.isSupported(ConditionalFeature.VIRTUAL_KEYBOARD)

结果将是false

原因如下:

  • Platform 调用Toolkit.getToolkit().isSupported(),然后转到QuantumToolkit,最后是calling Application.GetApplication().hasVirtualKeyboard()

  • Android的应用是MonocleApplicationhasVirtualKeyboard返回false:

    @Override
    public boolean hasVirtualKeyboard() {
        return deviceFlags[DEVICE_PC_KEYBOARD] == 0 && 
               deviceFlags[DEVICE_TOUCH] > 0;
    }
    

虽然支持触摸并且第二个条件为真,但第一个条件失败,因为device.isFullKeyboard()returns 为真。 deviceInputDevice 的一个实例,在Android 上由AndroidInputDevice 实现。

我们终于到达AndroidInputDevice::isFullKeyboard,它返回真并使上述条件为假。

我们可以看到 comment 解释了如何更改:

@Override
public boolean isFullKeyboard() {
    // if we return false, the JavaFX virtual keyboard will be used 
    // instead of the android built-in one
    return true;
}

如果您修改该行并构建 JavaFXPorts,您将获得对 JavaFX 键盘的支持。但鉴于该键盘的局限性,我不确定您为什么要使用它而不是原生键盘。

【讨论】:

  • 我的应用程序在纵向模式下运行。当我单击文本字段时,会弹出本机键盘并覆盖屏幕的一半(然后键盘隐藏下一个输入字段)。我需要克服这个问题。或者我如何自定义 android 本机键盘。请告诉我 JavaFX 虚拟键盘的限制是什么。
  • Gluon Mobile 解决了这个问题。但是,如果您想自己修复它,请查看此answer 或其他one。关于键盘,无法与原生键盘进行比较。您的用户不会期待不同的键盘。 JavaFX 不可自定义(语言、按钮等)
猜你喜欢
  • 2015-01-02
  • 2014-07-14
  • 2010-12-12
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2012-07-09
相关资源
最近更新 更多