由于Cordova 3.4.0和JQuery Mobile 1.4.2,我试图在我的应用程序中检测showkeyboard
和hidekeyboard
事件。在配置文件中,全屏属性设置为true(我需要它)。
事实是,在LogCat中,我无法阅读(显然是由于全屏模式):
SoftKeyboardDetect:忽略此事件
有没有解决方案来检测这两个事件?我通过检测输入字段上的模糊和焦点事件尝试了另一种方法。它可以工作,但是当后退按钮关闭键盘时,不会调用这些事件。
所以,我试图检测后退按钮事件,但它不起作用(http://simonmacdonald.blogspot.fr/2011/05/overriding-back-button-in-phonegap.html)。
答案 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);
为什么这样做?我相信因为它将我的回调放回到回调队列中。
注意:您可能仍会看到软键盘快速显示然后隐藏。没有办法解决这个问题。