J'ai passé beaucoup de temps à faire des recherches sur ce problème et encore plus de temps à essayer de le résoudre. J'espère que quelqu'un connaît une bonne solution à ce problème. Le problème concerne Sencha Touch 1.1, PhoneGap 1.2 et Android. J'ai commencé le projet il y a quelques mois et j'ai rencontré un problème de glissement des panneaux vers le haut lorsqu'une zone de texte ou un champ de texte reçoit le focus et lorsqu'une entrée au clavier est reçue alors que l'entrée a le focus.
J'ai lu plusieurs autres fils de discussion de stack overflow et du forum sencha qui décrivent des variations du même problème. La solution habituelle consiste à définir Android:windowSoftInputMode sur adjustPan au lieu de adjustResize. Cela élimine le problème du glissement du panneau vers le haut mais n'est pas acceptable dans mon cas car l'un des panneaux de l'application est une fenêtre de chat. Le champ de saisie doit toujours rester ancré contre la zone inférieure visible de l'écran. Par exemple, il doit rester ancré au bas de l'écran lorsqu'aucun clavier souple n'est visible et il doit rester ancré juste au-dessus du clavier souple lorsque celui-ci est sorti. J'y parviens si je redimensionne le panneau à la hauteur du viewport lorsque Ext.EventManager.onWindowResize est appelé (en utilisant Android:windowSoftInputMode=adjustResize). Le problème est que toute saisie au clavier entraîne le glissement de l'ensemble du panneau vers le haut. Une solution très bricolée et finalement inacceptable a été d'écouter les événements de touche et de faire glisser manuellement le panneau vers 0,0 en définissant sa position et en appelant window.scrollTo(0,0). Cela permet de remettre le panneau en place, mais l'expérience utilisateur est médiocre (l'écran rebondit de haut en bas à chaque lettre saisie).
L'utilisation de Android:windowSoftInputMode=adjustPan ne provoque aucun déplacement du panneau, mais ne fournit aucun moyen d'obtenir la hauteur du clavier programmable afin de positionner correctement le champ de saisie du chat directement au-dessus du clavier programmable (aucun à ma connaissance).
Question 1 : Existe-t-il un moyen de déterminer par programmation la hauteur d'un clavier souple sans utiliser Android:windowSoftInputMode=adjustResize et écouter l'événement Ext.EventManager.onWindowResize pour lire la taille de la fenêtre redimensionnée ?
Question 2 : existe-t-il un moyen d'utiliser Android:windowSoftInputMode=adjustResize et d'empêcher le navigateur de glisser vers le haut lorsqu'un champ de texte ou une zone de texte reçoit le focus ?
Merci d'avance pour toute aide. Cela a pris plus de 30 heures de temps et c'est pratiquement un coup d'arrêt pour cette application qui est maintenant en développement depuis plusieurs mois.
-Sean