Je crée un simple jeu de frappe sous Android. Je n’ai aucun problème à obtenir une entrée du clavier physique, mais j’essaie maintenant de faire en sorte que le clavier logiciel apparaisse sans EditText. J’ai déjà essayé ce qui suit:
1. EditText avec visibilité = "invisible" et cette ligne:
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed
2. Cette ligne dans le onCreate()
:
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Cette méthode affiche en fait une case blanche vide dans les 10% inférieurs de l'écran, mais pas le clavier, bien que, lorsque je l'exécute maintenant, cela ne fait rien.
3. Deux autres lignes dans le onCreate()
:
InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
Pas de chance sur aucun de ceux-ci. Est-il même possible d'afficher le clavier virtuel (puis d'utiliser onKeyUp
/onKeyDown
) sans se focaliser sur un EditText?
À l’heure actuelle, la seule façon de procéder consiste à créer ma propre implémentation du clavier logiciel (c’est-à-dire de le construire à partir de rien). Pas hâte de ça!
Réponses:
4 pour la réponse № 1Le code suivant fonctionne pour moi:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
J'utilise ce code dans un gestionnaire onKeyUp lorsque j'appuie sur le bouton "Menu".
3 pour la réponse № 2
À la place d'utiliser visibility="invisible"
vous pouvez définir android:alpha="0"
sur votre EditText. Donc, vous avez toujours besoin d’un texte d’édition mais il n’est pas visible et vous pouvez obtenir l’entrée du clavier logiciel onKeyListener()
2 pour la réponse № 3
Vous pouvez forcer l'affichage du clavier logiciel en utilisant:
InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED);
2 pour la réponse № 4
Assurez-vous d'activer le clavier logiciel pour votre vue:
setFocusable(true);
setFocusableInTouchMode(true);
Puis appelez:
InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
1 pour la réponse № 5
Notez que si vous travaillez en mode paysage, la saisie logicielle créera son propre champ de saisie de texte, ce qui gâchera tout votre travail. Vous pouvez empêcher ce comportement:
// This makes us remain invisible when in landscape mode.
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Maintenant, si vous avez configuré un EditText invisible, il restera tel que vous l'avez créé.