2010-10-21 27 views
2

J'essaie de convaincre un EditText -view d'utiliser uniquement le SoftKeyboard que j'ai écrit. Cela m'embête déjà depuis quelques jours et je n'arrive pas à croire que ce n'est pas possible. Je pourrais ne pas voir l'évidence ...Android: Attachez un SoftKeyboard (InputMethodService) à un EditText

Jusqu'à présent, j'ai réussi à écrire mon propre SoftKeyboard basé sur l'exemple fourni avec le SDK Android. Je suis en mesure de le sélectionner manuellement comme méthode de saisie (clic long, méthode de saisie, * sélection *). Le SoftKeyboard fonctionne alors bien et fait tout ce que je veux. J'ai également nettoyé le menu contextuel pour interdire le changement de la méthode d'entrée (évidemment, j'avais besoin d'être dans le menu sinon je ne serais pas capable de choisir mon SoftKeyboard). En d'autres termes, il ne reste plus qu'à attacher le SoftKeyboard au EditText.

J'ai remarqué le tas de ime* -attributs sur le EditText, mais ils ne semblent pas être utiles pour mon problème car je ne veux rien changer à propos de la clé d'action. inputMethod nécessite un KeyListener, ce qui n'est pas le cas du SoftKeyboard (j'ai essayé d'en faire un, mais il semble y avoir un problème avec le chargeur de classe car il ne trouverait pas ma classe =>ClassNotFoundException).

Quelqu'un peut-il me diriger vers des informations utiles?

Répondre

3

Je suis actuellement en train de réinventer mon approche et essayer de travailler sans le InputMethodService. Je garde l'exemple de code comme référence pour gérer l'entrée de l'utilisateur. Fondamentalement, il devrait juste être une vue simple qui apparaît au besoin. Après une recherche plus approfondie, j'ai trouvé une question vraiment utile au sujet d'un (e) App-specific soft-keyboard. Si vous rencontrez ma situation, regardez là.

0

Je ne peux pas croire que ce n'est pas possible de faire

Ce que je soupçonne que vous avez écrit est un éditeur de méthode d'entrée, en fonction de votre « sélectionner manuellement » note. Ceci est une construction globale, disponible pour l'utilisateur de choisir d'installer et d'utiliser si vous le souhaitez. Et votre éditeur de méthode de saisie peut être utilisé, à la discrétion de l'utilisateur, dans n'importe quelle application de l'appareil.

Dans votre code d'application, vous ne pouvez pas attribuer de mandat à un éditeur de méthode de saisie particulier, que vous l'ayez écrit ou non.

Ce que vous pourriez faire, peut-être, est d'organiser l'utilisation de la même interface utilisateur de votre éditeur de méthode de saisie comme une sorte de pop-up dans votre activité. Par exemple, KeyboardView, selon Mme Hackborn, est une norme View et peut être utilisé comme un autre. L'utilisateur peut appuyer sur un bouton à côté de votre EditText pour afficher l'interface utilisateur du clavier (par exemple, glisser vers le haut depuis le bas de l'écran), ou quelque chose comme ça.

J'ai aussi nettoyé le menu contextuel pour changer désavouer la méthode d'entrée

S'il vous plaît permettre à l'utilisateur de choisir la méthode d'entrée, ou ne pas utiliser un EditText.

+0

Oui, vous avez compris mon problème. Je ne veux pas laisser l'utilisateur changer la méthode de saisie car l'application a une logique supplémentaire pour les touches enfoncées. L'utilisateur est bien conscient de cela (rien d'illégal de toute façon). En fait, je ne voudrais pas que la méthode d'entrée soit disponible pour tout autre EditText autre que le mien car cela causerait beaucoup de problèmes autrement.Fondamentalement, j'ai besoin de savoir si mon application a le focus et montrer un dialogue sinon. Bon point! Je vais aussi chercher à forcer mon interface utilisateur à apparaître sur un robinet. – sjngm

+0

@sjngm: "En fait, je ne voudrais pas que la méthode d'entrée soit disponible pour tout autre EditText autre que le mien car cela causerait beaucoup de problèmes autrement." - Certainement pas un bon rôle pour le service de méthode d'entrée, alors. Cependant, vous pouvez toujours utiliser 'KeyboardView'. – CommonsWare

+0

@cw: Droit. J'essaie actuellement d'obtenir le clavier sur l'écran. Cependant, j'échoue misérablement là (c'est mon premier projet Android de toute façon ...). L'exemple SoftKeyboard utilise une classe sous-classée dans KeyboardView. J'espère juste qu'une fois que je l'aurai sur l'écran, le reste fonctionnera "automatiquement". J'ai le clavier dans la disposition, mais le champ de saisie doit être en plein écran. Le clavier doit apparaître en quelque sorte ... – sjngm