如何在 apache cordova 中隐藏 SoftKeyboard android

How to hide SoftKeyboard in apache cordova android

我有一个旧的 android 应用程序是用 cordova 开发的,我不太熟悉它作为本机 java。在我的应用程序案例中,当它打开时显示一个带有用户名、密码和登录按钮的登录屏幕,我发现处理此功能的文件是 signin.js,代码如下

Ext.define('GBMob.view.Signin',{
    extend: 'Ext.form.Panel',

    requires: [
        'Ext.data.JsonP',
        'Ext.field.Password',
        'Ext.form.FieldSet',
        'GBMob.view.GBHome'
    ],

    config: {

    items: [
    {
        xtype: 'fieldset',
        title: 'User Info',
        instructions: 'Enter Username/Email and Password.',
        maxWidth: 550,

        items: [
        {
            xtype: 'textfield',
            name: 'username',
            label: 'Username'
        },
        {
            xtype: 'passwordfield',
            name: 'password',
            label: 'Password'
        },
        {
            xtype: 'button',
            text: 'Sign in',
            ui: 'confirm',
            padding: 2,
            margin: 15,
            flex: 0.3,

            handler: function() {

                var loadingMask = {
                    xtype: 'loadmask', 
                    message: 'Signing in ...' 
                };

                Ext.Viewport.setMasked(loadingMask);

                var softkeyboard = window.cordova.plugins.SoftKeyBoard;
                softkeyboard.hide();

                username = SigninView.getValues().username;
                password = SigninView.getValues().password;

                Ext.data.JsonP.request({

                    url: 'https://xxxxxx.com/api/login/',
                    scope: this,

                    params: {
                        data:  base64.encode(username.toLowerCase() + ':' + password)
                    },

                    success: function(result) {

                        ........
                        ........
                        ........
                console.log("Signing in with Username: " + username + " and password: " + password);
            }
        }
        ]
    }]
    }
});

到目前为止,代码运行良好,但问题出在用户输入 username and password 并单击 Sign in 按钮后 keyboard was not disappearing 并且由于在重定向到仪表板后一半的仪表板页面消失了(消失),我的意思是只有一半页面可见而一半页面是空白的(可能是之前的登录屏幕键盘部分正在制作仪表板半屏 invisible/blank 白色背景)。所以我决定在点击 Sign in 按钮后立即隐藏键盘,因此做了以下

  1. 将键盘插件搜索为 cordova plugin search keyboard
  2. 已将 SoftKeyboard 插件安装为 cordova plugin add org.apache.cordova.plugin.softkeyboard
  3. 在 signin.js 文件中添加以下两行,如上面代码
  4. 中所述

var softkeyboard = window.cordova.plugins.SoftKeyBoard;

softkeyboard.hide();

但是在添加以上两行之后,我根本无法登录,应用程序只显示登录....不断屏蔽。

那么上面添加的两行代码有什么问题,在 cordova 中单击按钮后需要做什么才能立即隐藏键盘?

有人知道如何在 cordova 中隐藏键盘吗?

在 Whosebug 的某个地方找到这个函数来隐藏 android

中的键盘

我们需要创建一个 javascript 函数,如下所示

function hideKeyboard() {
  //this set timeout needed for case when hideKeyborad
  //is called inside of 'onfocus' event handler
  setTimeout(function() {

    //creating temp field
    var field = document.createElement('input');
    field.setAttribute('type', 'text');
    //hiding temp field from peoples eyes
    //-webkit-user-modify is nessesary for Android 4.x
    field.setAttribute('style', 'position:absolute; top: 0px; opacity: 0; -webkit-user-modify: read-write-plaintext-only; left:0px;');
    document.body.appendChild(field);

    //adding onfocus event handler for out temp field
    field.onfocus = function(){
      //this timeout of 200ms is nessasary for Android 2.3.x
      setTimeout(function() {

        field.setAttribute('style', 'display:none;');
        setTimeout(function() {
          document.body.removeChild(field);
          document.body.focus();
        }, 14);

      }, 200);
    };
    //focusing it
    field.focus();

  }, 50);
}

并在需要时在您的 js 文件中的任何位置调用它,例如

hideKeyboard();