Je souhaite afficher automatiquement le clavier virtuel lorsqu'un EditText
est ciblé (si l'appareil n'a pas de clavier physique) et j'ai deux problèmes:
Lorsque mon
Activity
est affiché, monEditText
est focalisé mais le clavier n'est pas affiché, je dois cliquer à nouveau dessus pour afficher le clavier (il doit être affiché lorsque monActivity
est affiché).Et quand je clique sur terminé sur le clavier, le clavier est rejeté mais le
EditText
reste concentré et y ne veut pas (car ma modification est terminée).
Pour reprendre, mon problème est d'avoir quelque chose de plus comme sur l'iPhone: qui garde la synchronisation du clavier avec mon EditText
état (focalisé / non focalisé) et bien sûr ne présente pas de clavier logiciel s'il y en a un physique.
la source
Réponses:
Pour forcer l'affichage du clavier virtuel, vous pouvez utiliser
Et pour supprimer la mise au point
EditText
, malheureusement, vous devez avoir un mannequinView
pour saisir la mise au point.J'espère que ça aide
Pour le fermer, vous pouvez utiliser
Cela fonctionne pour l'utiliser dans une boîte de dialogue
la source
yourEditText.requestFocus()
comme décrit ici: stackoverflow.com/questions/8991522/…J'ai eu le même problème. Immédiatement après le changement de VISIBILITÉ de editText de GONE à VISIBLE, j'ai dû régler la mise au point et afficher le clavier virtuel. J'ai réalisé cela en utilisant le code suivant:
Cela fonctionne pour moi avec un retard de 100 ms, mais a échoué sans aucun retard ou avec seulement un retard de 1 ms.
La partie commentée du code montre une autre approche, qui ne fonctionne que sur certains appareils. J'ai testé les versions OS 2.2 (émulateur), 2.2.1 (appareil réel) et 1.6 (émulateur).
Cette approche m'a sauvé beaucoup de douleur.
la source
EditText
. Pour ceux qui lisent ceci, au lieu d'en créer un nouveau,Handler
vous pouvez également utiliser laView.postDelayed()
méthode sur leyourEditText
widget lui-même.Pour faire apparaître le clavier, utilisez
Cette méthode est plus fiable que d'appeler directement InputMethodManager.
Pour le fermer, utilisez
la source
InputMethodManager
? (D'une part, cela ne fonctionne pas, contrairement à la solution de raukodraug.)Lorsque rien d'autre ne fonctionne, forcez-le à s'afficher :
Et puis plus tard, si vous souhaitez le fermer, dans onPause () par exemple, vous pouvez appeler:
la source
Le code suivant est pillé à partir du code source de Google 4.1 pour SearchView. Semble fonctionner, très bien sur les versions moindres d'Android.
Ensuite, en outre, le code suivant doit être ajouté lors de la création du contrôle / de l'activité. (Dans mon cas, c'est un contrôle composite, plutôt qu'une activité).
la source
setImeVisibility(hasFocus)
?android:windowSoftInputMode="stateAlwaysVisible"
-> dans le fichier manifeste.edittext.requestFocus();
-> en code.Cela ouvrira le clavier logiciel sur lequel le texte d'édition a le focus de demande lorsque l'activité apparaît.
la source
manifest
!J'ai eu récemment de la chance dans certains cas simples avec le code ci-dessous. Je n'ai pas terminé tous les tests mais ...
Et hop, le clavier apparaît.
la source
Vous pouvez essayer de forcer le clavier virtuel à apparaître, cela fonctionne pour moi:
la source
Parfois, la réponse de raukodraug ne fonctionne pas. Je l'ai fait de cette manière avec quelques essais et erreurs:
Et la partie EditText :
la source
Pour masquer le clavier, utilisez celui-ci:
et pour afficher le clavier:
la source
onStart()
et vous pouvez utilisergetDialog().getWindow()
comme alternative àgetActivity().getWindow()
.Et pour Kotlin, utilisez simplement ces extensions:
la source
Pour fragment, bien sûr son fonctionnement:
la source
showSoftInput
ne fonctionnait pas du tout pour moi.J'ai pensé que je devais définir le mode d'entrée: (ici dans le composant Activity du manifeste)
la source
Croyez ou non mon problème avec le clavier logiciel a été résolu lorsque j'ai découvert que les animations d'activités pouvaient désactiver le clavier logiciel. Lorsque vous appelez l'intention avec le
et
Il peut masquer le clavier logiciel et il n'y a aucun moyen de le montrer.
la source
J'ai eu le même problème dans diverses situations différentes, et les solutions que j'ai trouvées fonctionnent dans certains mais ne fonctionnent pas dans d'autres alors voici une solution de combinaison qui fonctionne dans la plupart des situations que j'ai trouvées:
la source
la source
J'ai tout combiné ici et pour moi ça marche:
la source
Ça a marché pour moi. Vous pouvez également essayer d'afficher le clavier:
la source
extrait de code . . .
la source
Kotlin
extension pour afficher le clavier au point.Il s'agit d'une combinaison de réponses précédentes, qui étaient trop longues ou incomplètes.
Cette extension publie un exécutable dans la file d'attente des messages qui montre le clavier virtuel après avoir demandé le focus:
Appelez-le de n'importe quelle vue lorsque cela est nécessaire par la suite:
la source
il suffit d'ajouter android: windowSoftInputMode = "stateHidden" dans le fichier manifeste ...
la source
la source
À l'intérieur de votre manifeste:
android:windowSoftInputMode="stateAlwaysVisible"
- clavier initialement lancé.android:windowSoftInputMode="stateAlwaysHidden"
- clavier initialement caché.J'aime aussi l'utiliser
"adjustPan"
parce que lorsque le clavier se lance, l'écran s'ajuste automatiquement.la source
Ajoutez simplement cette ligne dans votre vue EditText:
et TADA - le clavier a commencé à apparaître automatiquement!
J'ai eu un problème similaire et j'ai découvert cette solution simple et étrange.
Comme déjà mentionné ici par user3392439, l'apparence du clavier lors de la mise au point est en quelque sorte étrangement liée à la présence du composant de défilement dans le fichier XML.
Même la présence d' une autre vue EditText qui comprend la ligne susmentionnée dans le même XML fait apparaître le clavier, peu importe lequel des EditTexts est actuellement focalisé.
Si vous avez au moins une vue visible comprenant un composant de défilement dans votre fichier XML - le clavier apparaîtra automatiquement sur le focus.
Si aucun défilement - alors vous devez cliquer sur EditText pour faire apparaître le clavier.
la source
requesFocus()
depuis un gestionnaire de clics et c'est la seule façon autre qu'un showSoftInput SHOW_FORCED expliciteToutes les solutions données ci-dessus ( interaction InputMethodManager dans l' écouteur OnFocusChangeListener.onFocusChange attaché à votre EditText fonctionne correctement si vous avez une seule modification dans l'activité.
Dans mon cas, j'ai deux modifications.
J'ai observé que onFocusChange est déclenché pour tvX avec hasFocus = true (clavier illustré) mais ensuite pour tvY avec hasFocus = true (clavier masqué). Au final, aucun clavier n'était visible.
La solution générale devrait avoir une déclaration correcte si "afficher le clavier si le texte EditText a le focus"
la source
Dans votre section onResume () de l'activité, vous pouvez appeler la méthode bringKeyboard ();
la source
WidgetUtils.showKeyboard
? C'est l'élément le plus important ici.Aucune des réponses n'a fonctionné pour moi. Voici un moyen simple.
Nous venons de retarder la méthode requestFocus () de 400 ms.
la source
J'ai découvert un comportement étrange, car dans l'une de mes applications, le clavier virtuel s'affichait automatiquement en entrant dans l'activité (il y a un editText.requestFocus () dans onCreate).
En creusant plus loin, j'ai découvert que c'était parce qu'il y avait un ScrollView autour de la mise en page. Si je supprime ScrollView, le comportement est tel que décrit dans l'énoncé du problème d'origine: ce n'est que lorsque vous cliquez sur le texte d'édition déjà concentré que le clavier virtuel s'affiche.
Si cela ne fonctionne pas pour vous, essayez de mettre en ScrollView - il est inoffensif de toute façon.
la source
J'ai eu un problème similaire lors de l'utilisation des animations de vue . J'ai donc mis un écouteur d'animation pour m'assurer d' attendre la fin de l'animation avant d'essayer de demander un accès au clavier sur l'edittext affiché.
la source
Je suis d'accord avec raukodraug à cet effet en utilisant dans un swithview vous devez demander / effacer le focus comme ceci:
Cordialement.
la source