Как включить виртуальную клавиатуру JavaFX в Android с помощью JavaFXPorts - PullRequest
0 голосов
/ 05 октября 2018

Я включил виртуальную клавиатуру JavaFX в настольном приложении (передав аргументы виртуальной машины).Но при портировании на приложение для Android с использованием JavaFXPorts виртуальная клавиатура JavaFX не видна в Android, которая показывает встроенную клавиатуру Android.И я попытался передать аргументы jvm через строку комментария (пока запускаю gdradlew android), но это не работает.А также я попытался вызвать методы FXVK.init(textField); FXVK.attach(textField);, когда текстовое поле было сфокусировано.Но они не показывают виртуальную клавиатуру JavaFX, она показывает только собственную клавиатуру Android.

1 Ответ

0 голосов
/ 05 октября 2018

Использование 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;
    }
    

Пока поддерживается касание и выполняется второе условие,первое условие не выполняется, потому что device.isFullKeyboard() возвращает 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.Но, учитывая ограничения этой клавиатуры, я не уверен, почему вы захотите использовать ее вместо родной.

...