如何使用 JavaFXPorts 在 android 中启用 JavaFX 虚拟键盘
Posted
技术标签:
【中文标题】如何使用 JavaFXPorts 在 android 中启用 JavaFX 虚拟键盘【英文标题】:How to enable JavaFX virtual keyboard in android using JavaFXPorts 【发布时间】:2018-10-05 06:25:23 【问题描述】:我已在桌面应用程序上启用 JavaFX 虚拟键盘(通过传递虚拟机参数)。但是,当使用 JavaFXPorts 移植到 android 应用程序时,JavaFX 虚拟键盘在 android 中不可见,这显示了 android 的本机键盘。我试图通过注释行传递 jvm 参数(在运行 gdradlew android
时),但它不起作用。我还尝试在文本字段集中时调用 FXVK.init(textField); FXVK.attach(textField);
方法。但是这些都没有显示 JavaFX 虚拟键盘,它只显示 android 本机键盘。
【问题讨论】:
请提供一个minimal reproducible example 来说明问题。 【参考方案1】:在 Android 上使用 JavaFXPorts,如果您尝试打印:
Platform.isSupported(ConditionalFeature.VIRTUAL_KEYBOARD)
结果将是false
。
原因如下:
Platform
调用Toolkit.getToolkit().isSupported()
,然后转到QuantumToolkit
,最后是calling Application.GetApplication().hasVirtualKeyboard()
。
Android的应用是MonocleApplication
,hasVirtualKeyboard返回false:
@Override
public boolean hasVirtualKeyboard()
return deviceFlags[DEVICE_PC_KEYBOARD] == 0 &&
deviceFlags[DEVICE_TOUCH] > 0;
虽然支持触摸并且第二个条件为真,但第一个条件失败,因为device.isFullKeyboard()
returns 为真。 device
是InputDevice
的一个实例,在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 不可自定义(语言、按钮等)以上是关于如何使用 JavaFXPorts 在 android 中启用 JavaFX 虚拟键盘的主要内容,如果未能解决你的问题,请参考以下文章
JavaFXPorts MySqlDB-Driver 包含在项目中:dex 错误
Gradle 找不到 Android 支持存储库 - Eclipse Neon、Gradle 3.5、javafxports
MyEclipse中android 项目如何解决第三方jar无法关联源码的问题( The JAR of this class file belongs to container 'Androi