web-dev-qa-db-fra.com

Cordova 3.4 - Détecter un événement de clavier

J'essaie de détecter les événements showkeyboard et hidekeyboard dans mon application s'exécutant grâce à Cordova 3.4.0 et JQuery Mobile 1.4.2. Dans le fichier de configuration, l'attribut fullscreen est défini sur true (j'en ai besoin).

Le fait est que, dans LogCat, je ne peux pas lire (apparemment, cela est dû au mode plein écran):

SoftKeyboardDetect: Ignorer cet événement

Existe-t-il une solution pour détecter ces deux événements? J'ai essayé une méthode alternative en détectant les événements de flou et de focalisation sur mon champ d'entrée. Cela fonctionne, mais lorsque le clavier est fermé par le bouton Précédent, ces événements ne sont pas appelés.

Donc, j'ai essayé de détecter l'événement backbutton, mais cela ne fonctionne pas ( http://simonmacdonald.blogspot.fr/2011/05/overriding-back-button-in-phonegap.html ).

11
Schnapse

Je pense que cela fonctionnera pour vos besoins - 

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

// modifier

Comme vous ne pouvez pas vous connecter à ces événements, vous avez besoin d'un plugin. Celui-ci va faire l'affaire

Pour installer le plugin, effectuez 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');
}
18
Ross

Le plugin clavier Ionic vous donne les événements native.showkeyboard et native.hidekeyboard qui peuvent être utilisés de la manière suivante: Après l’avoir ajouté à votre projet:

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

utilisez-le de cette façon:

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

Une description et des fonctionnalités supplémentaires sont disponibles sur github Cela a fonctionné pour moi dans Cordova 3.4 avec le mode plein écran configuré dans le fichier config.xml. Le fait qu'il y ait 15036 téléchargements en dit long, mais comme je l'ai dit, je l'ai aussi utilisé moi-même en plein écran avec la version exacte de Cordova (et c'était en fait la seule chose qui a fonctionné pour moi, plus elle prend en charge ios aussi)

5
Andreas

Bonjour, si vous avez besoin de showkeyboard et hidekeyboard events dans une application basée sur phonegap dont vous devez supprimer l’option plein écran, seuls ces événements se déclencheront.

2
Arjun T Raj

Je ne pouvais obtenir aucune des réponses ici, donc j'ai pensé partager ma solution.

Mon scénario est que j'utilise un groupe de boutons Bootstrap pour naviguer entre les écrans et que certains écrans doivent avoir des champs <input/> avec le focus par défaut. Eh bien, quand je mets l'accent sur un champ, le clavier virtuel apparaît. J'ai essayé de masquer le clavier lorsque le nouveau <input/> était affiché, mais il semble que le clavier Android soit affiché immédiatement après le rendu de la page (c'est-à-dire après que l'appel à Keyboard.hide(); a été exécuté).

Mon travail consiste à utiliser une setTimeout, comme indiqué ci-dessous.

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

Pourquoi ça marche? Je crois que cela place mon rappel suffisamment loin dans la file d'attente. 

REMARQUE: Il est possible que le clavier logiciel affiche toujours, puis se cache. Je n'ai pas trouvé de moyen de contourner ça.

0
aaronbartell