Я включил виртуальную клавиатуру JavaFX в настольном приложении (путем передачи аргументов виртуальной машины). Но при переносе на приложение Android с использованием JavaFXPorts виртуальная клавиатура JavaFX не отображается в Android, что показывает родную клавиатуру Android. И я попытался передать аргументы jvm через строку комментариев (при запуске gdradlew android
), но это не сработало. А также я попытался вызвать методы FXVK.init(textField); FXVK.attach(textField);
, когда текстовое поле было сфокусировано. Но они не показывают виртуальную клавиатуру JavaFX, она показывает только родную клавиатуру Android.
Как включить виртуальную клавиатуру JavaFX в Android с помощью JavaFXPorts
Ответы (1)
Используя JavaFXPorts на Android, если вы попытаетесь распечатать:
Platform.isSupported(ConditionalFeature.VIRTUAL_KEYBOARD)
Результат будет false
.
И причину этого можно найти в следующем:
Platform
вызываетToolkit.getToolkit().isSupported()
, который переходит кQuantumToolkit
, который заканчивается вызовApplication.GetApplication().hasVirtualKeyboard()
.Приложение для Android:
MonocleApplication
и hasVirtualKeyboard возвращает false:@Override public boolean hasVirtualKeyboard() { return deviceFlags[DEVICE_PC_KEYBOARD] == 0 && deviceFlags[DEVICE_TOUCH] > 0; }
В то время как сенсорный ввод поддерживается и второе условие истинно, первое условие не выполняется, потому что /java/com/sun/glass/ui/monocle/MonocleApplication.java?at=default#lines-104" rel="nofollow noreferrer">возвращает true. device
— это экземпляр InputDevice
, который на Android реализован AndroidInputDevice
.
И, наконец, мы добираемся до AndroidInputDevice::isFullKeyboard
, который возвращает true и делает приведенное выше условие ложным.
И мы видим комментарий, поясняющий, как это можно изменить:
@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. Но, учитывая ограничения этой клавиатуры, я не уверен, почему вы захотите использовать ее вместо родной.