2011-08-03 6 views
9

courte question: Est-il possible (et comment) pour afficher le clavier à l'écran à partir d'un service?Comment afficher le clavier logiciel d'un service?

Question longue: J'ai écrit un service qui crée une "barre supérieure", affichée au-dessus de toutes les activités, contenant un EditText. Je veux afficher le clavier logiciel lorsque l'EditText est cliqué, mais cela ne se produit pas.

Bien sûr, j'ai essayé ceci du onFocusChange de service() et onClick():

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

La solution je suis venu avec est de demander l'activité en cours pour afficher le clavier, en étendant l'activité classe et en ajoutant une interface AIDL. L'inconvénient est que chaque événement clé doit être renvoyé au Service (via une autre interface AIDL) et converti manuellement en Unicode.

De plus, si l'activité actuelle contient un EditText, le clavier virtuel ne fonctionne que pour l'activité et ne montre pas plus quand est sélectionné EditText du service.

Qu'est ce qui empêche clavier à l'écran de service à afficher si l'activité en cours a une EditText? Serait-ce une limitation Android?

+0

avez-vous résoudre ce problème? je suis confronté au même problème –

Répondre

0

Si vous voulez afficher sur le clavier logiciel tactile edittext, Pourquoi considérez-vous de ne pas utiliser onTouchListener avec cette edittext. Je crois que edittext.requestfocus() le fera aussi. Si non, l'auditeur fonctionnerait certainement.

De plus pour le genre de vue que vous mentionner, il aurait été préférable d'utiliser des fragments au lieu de service pour créer la vue.

1

Je suis confronté à un problème similaire. Mais dans mon cas, problème est dû à l'utilisation de WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE drapeau tout en créant WindowManager.LayoutParams pour une vue.

Et pour une meilleure visibilité du clavier

InputMethodManager inputManager = (InputMethodManager) context. 
       getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (inputManager != null) { 
      inputManager.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 
     } 
Questions connexes