【问题标题】:Cordova 3.4 - Detect keyboard eventCordova 3.4 - 检测键盘事件
【发布时间】:2014-06-22 01:04:36
【问题描述】:

感谢 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)。

【问题讨论】:

  • 如果是全屏事件不起作用,需要重新全屏

标签: android jquery events cordova keyboard


【解决方案1】:

我认为这将满足您的需求 -

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');
}

【讨论】:

  • 我的应用程序处于全屏模式(因为this other problem),在这种情况下不会调用这两个事件。所以你的解决方案不起作用。由于 onblur 和 onfocus 事件,我几乎无法检测到这些事件:$('"input[type=text]").bind("focus", function(e) { ... }); 但是当键盘由于后退按钮而隐藏时,即使我覆盖了后退按钮事件,也不会调用该函数。
  • @Schnapse 我包含了有关如何下载插件的说明。
  • 感谢您的回复。这个插件允许我们手动显示/隐藏键盘并检查它是显示还是隐藏,但是当它显示或隐藏时我们无法检测到事件。我正在寻找一种方法来检测这两个事件。
  • @Schnapse 我更新了我的答案以使用Ionic keyboard plugin
  • @Andreas 是的,我觉得有必要使用这个可用的插件更新答案。感谢您添加它。
【解决方案2】:

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 作为好吧)

【讨论】:

    【解决方案3】:

    您好,如果您在基于 phonegap 的应用程序中需要 showkeyboardhidekeyboard 事件,您需要删除全屏选项,那么只有这些事件会触发。

    【讨论】:

    • 不幸的是,全屏选项是我为了纠正another problem而找到的唯一解决方案。如果我删除它,我的应用程序将无法运行。
    • 如果它是全屏的,那么 keyboadrd evnts 永远不会按照 phonegap doc 完美运行
    • 请更新您的答案。 @Ross 的回答是正确的,使用 Ionic 插件会触发这些事件。
    【解决方案4】:

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

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

    我的解决方法是使用setTimeout,如下所示。

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

    为什么会这样?我相信,因为它将我的回调放在回调队列中足够远的地方。

    注意:您可能仍会看到软键盘快速显示然后隐藏。还没找到解决办法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-06
      • 2010-09-18
      • 1970-01-01
      • 2020-04-20
      • 2015-06-26
      • 2016-12-23
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多