如何在没有cordova插件的情况下隐藏软键盘而不会丢失焦点

时间:2015-03-13 17:42:19

标签: javascript android jquery cordova javascript-events

我想在没有插件的情况下点击<input type=text>并且不丢失input的焦点时隐藏Android原生键盘。

使用JavaScript我可以检测键盘显示或隐藏的时间,但我想在需要时隐藏它。

backbutton在键盘显示时会隐藏键盘,因此,我认为当我检测到showkeyboard事件时我可以触发后退按钮点击事件,但它不起作用。

document.addEventListener("showkeyboard", 
    function(){ 
        alert("Keyboard is ON"); 
        $("backbutton").trigger('click'); // Doesn't work effect
    }, false);

document.addEventListener("hidekeyboard", 
    function(){ 
        alert("Keyboard is OFF");

    }, false);

祝你好运

2 个答案:

答案 0 :(得分:0)

首先在你的主要活动导入中:

    import android.view.inputmethod.InputMethodManager;
    import android.webkit.JavascriptInterface;

然后在onCreate方法中添加一个javascript接口:

   super.appView.addJavascriptInterface(new JSInterface(), "testInterface");

之后在Mainactivity类中添加以下代码:

    @JavascriptInterface
    public void hideKeyboard() {
        runOnUiThread(new Runnable() {

            public void run() {
                try {
                    InputMethodManager inputMethodManager = (InputMethodManager) getApplicationContext().getSystemService(Service.INPUT_METHOD_SERVICE);
                    inputMethodManager.hideSoftInputFromWindow(<MainactivityClass>.this.getCurrentFocus().getWindowToken(), 0);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

现在从HTML中,像这样调用输入框中的本机hideKeyboard()方法:

    <input type="text" onfocus="window.testInterface.hideKeyboard()" />

答案 1 :(得分:0)

尝试直接使用

document.getElementById('input_field_to_focus').focus();

这会将焦点添加到输入字段,但不会调用软键盘。 除非来自点击事件,否则不会在Android上触发键盘打开事件。

请参阅链接:http://code.google.com/p/android/issues/detail?id=27438