Cordova 3.4 - 检测键盘事件

时间:2014-05-05 16:32:13

标签: android jquery events cordova keyboard

由于Cordova 3.4.0和JQuery Mobile 1.4.2,我试图在我的应用程序中检测showkeyboardhidekeyboard事件。在配置文件中,全屏属性设置为true(我需要它)。

事实是,在LogCat中,我无法阅读(显然是由于全屏模式):

  

SoftKeyboardDetect:忽略此事件

有没有解决方案来检测这两个事件?我通过检测输入字段上的模糊和焦点事件尝试了另一种方法。它可以工作,但是当后退按钮关闭键盘时,不会调用这些事件。

所以,我试图检测后退按钮事件,但它不起作用(http://simonmacdonald.blogspot.fr/2011/05/overriding-back-button-in-phonegap.html)。

4 个答案:

答案 0 :(得分:19)

我认为这可以满足您的需求 -

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady () {
    document.addEventListener('hidekeyboard', onKeyboardHide, false);
    document.addEventListener('showkeyboard', onKeyboardShow, false);
}

function onKeyboardHide() {
    console.log('onKeyboardHide');
}

function onKeyboardShow() {
    console.log('onKeyboardShow');
}

//编辑

由于您无法挂钩这些事件,因此您需要一个插件。 This one here will do the trick

要安装插件,请执行cordova plugin add com.ionic.keyboard

// This event fires when the keyboard will be shown

window.addEventListener('native.keyboardshow', keyboardShowHandler);

function keyboardShowHandler(e){
    console.log('Keyboard height is: ' + e.keyboardHeight);
}

// This event fires when the keyboard will hide

window.addEventListener('native.keyboardhide', keyboardHideHandler);

function keyboardHideHandler(e){
    console.log('Goodnight, sweet prince');
}

答案 1 :(得分:5)

Ionic keyboard plugin为您提供native.showkeyboard和native.hidekeyboard事件,可以这样使用: 将它添加到您的项目后:

cordova plugin add https://github.com/driftyco/ionic-plugins-keyboard.git

以这种方式使用它:

window.addEventListener('native.hidekeyboard', keyboardHideHandler);
window.addEventListener('native.showkeyboard', keyboardShowHandler);
function keyboardHideHandler(e){
    alert('Goodnight, sweet prince');
}
function keyboardShowHandler(e){
    alert('Keyboard height is: ' + e.keyboardHeight);
}

可在github找到额外的说明和功能  这在Cordova 3.4中为我工作,在config.xml文件中配置了全屏模式。它有15036次下载这一事实说明了很多,但正如我所说的那样,我也在全屏幕上使用了确切的Cordova版本。(它实际上是唯一对我有用的东西加上它支持ios也是)

答案 2 :(得分:2)

如果您在基于phonegap的应用程序中需要 showkeyboard hidekeyboard 事件,则需要删除全屏选项,然后才会触发这些事件。

答案 3 :(得分:1)

我无法在这里得到任何答案,所以我想我会分享我的解决方案。

我的方案是使用Bootstrap按钮组在屏幕之间导航,某些屏幕需要具有默认焦点的<input/>字段。好吧,当我将焦点放在一个字段上时,它会调出软键盘。我在显示新<input/>时试图隐藏键盘,但似乎在页面完成渲染后立即显示Android键盘(这是在我调用Keyboard.hide();之后)

我的工作是使用setTimeout,如下所示。

$("#my_input").focus();
window.setTimeout(function(){
  Keyboard.hide();
}, 1);

为什么这样做?我相信因为它将我的回调放回到回调队列中。

注意:您可能仍会看到软键盘快速显示然后隐藏。没有办法解决这个问题。