Клавиатура IONIC скрывает фокус ввода

Я пишу приложение Ionic, которое будет использоваться для логистических целей в секторе здравоохранения.
Устройства, которые будут использоваться для этого приложения, имеют встроенный сканер штрих-кода и работают на Android 4.1.1.
Это сканер вводит данные в поле ввода и отправляет их нажатием клавиши «ввод». Из-за того, что сканер является моей «клавиатурой» в определенных ситуациях, я хочу скрыть клавиатуру при фокусе ввода или щелчке.

Я написал следующую директиву, используя плагин Cordova для ионной клавиатуры:

directives.directive("showKeyboard", [
function()  {
    var linkFn = function(scope, element, attrs) {
        console.log(scope);
        console.log(element);
        console.log(attrs);
        if(!window.cordova || !window.cordova.plugins.Keyboard) return; // Check for cordova keyboard plugin

        if(element[0].nodeName.toLowerCase() != 'input') return; // check for input

        if(attrs.type.toLowerCase() != 'password' && attrs.type.toLowerCase() != 'text') return; // check for type of input

        element.bind("focus click",
            function(e) {
                e.preventDefault();
                if(scope.$eval(attrs.showKeyboard)){
                    console.log('show')
                    window.cordova.plugins.Keyboard.show();
                }
                else    {
                    console.log('hide');
                    cordova.plugins.Keyboard.close();

                }
            }
        );
    };

    var keyboardDirective = {
        restrict : 'A',
        link: linkFn
    };

    return keyboardDirective;

}
]);  

Функция вроде работает. Только клавиатура не закрывается и, кажется, «принудительно» открывается устройством.

какие-либо предложения?


person Jowin Waaijer    schedule 28.05.2015    source источник
comment
Решено. Пришлось установить тайм-аут для функции закрытия, прежде чем снова можно было ее скрыть.   -  person Jowin Waaijer    schedule 05.06.2015
comment
Можете ли вы опубликовать обновление кода в качестве ответа на решение?   -  person Karl Gjertsen    schedule 30.11.2016
comment
https://stackoverflow.com/questions/43609219/ionic-keyboard-hide-input-in-ion-scroll-on-android-device/48182372#48182372 относятся к этой ссылке   -  person tao wang    schedule 19.04.2018


Ответы (1)


Я попытался использовать вашу директиву, чтобы подавить встроенную клавиатуру по умолчанию, чтобы отобразить альтернативную клавиатуру, и обнаружил, что мне пришлось использовать $timout 100 мс, прежде чем вызывать скрытие для закрытия клавиатуры (чтобы обойти состояние гонки). Однако он создает артефакт мерцания, поэтому это не лучшее решение. Еще одна идея, которую я еще не пробовал, состоит в том, чтобы подавить клавиатуру на стороне Android в Java с помощью специального плагина, который будет вызывать

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
person ABCD.ca    schedule 06.01.2016