Je me demande s'il existe un moyen de gérer la pression de l'utilisateur Enterlors de la saisie d'un EditText
, quelque chose comme l'événement HTML onSubmit.
Vous vous demandez également s'il existe un moyen de manipuler le clavier virtuel de telle sorte que le bouton "Terminé" soit étiqueté autre chose (par exemple "Go") et effectue une certaine action lorsque vous cliquez dessus (à nouveau, comme onSubmit).
Réponses:
Oui.
Oui aussi.
Vous voudrez regarder les attributs
android:imeActionId
etandroid:imeOptions
, ainsi que lasetOnEditorActionListener()
méthode, tout celaTextView
.Pour changer le texte du bouton "Terminé" en une chaîne personnalisée, utilisez:
la source
la source
enter
dans mon texte d'édition, le texte d'édition entier se déplace vers le bas ... Comment résoudre ce problème?Voici ce que vous faites. Il est également masqué dans l'exemple de code du développeur Android «Bluetooth Chat». Remplacez les parties en gras qui disent "exemple" par vos propres variables et méthodes.
Tout d'abord, importez ce dont vous avez besoin dans l'activité principale où vous souhaitez que le bouton de retour fasse quelque chose de spécial:
Maintenant, créez une variable de type TextView.OnEditorActionListener pour votre clé de retour (ici j'utilise exampleListener );
Ensuite, vous devez dire à l'auditeur deux choses à faire lorsque vous appuyez sur le bouton de retour. Il doit savoir de quel EditText nous parlons (ici j'utilise exampleView ), puis il doit savoir quoi faire lorsque la touche Entrée est enfoncée (ici, example_confirm () ). S'il s'agit du dernier ou du seul EditText de votre activité, il doit faire la même chose que la méthode onClick pour votre bouton Soumettre (ou OK, Confirmer, Envoyer, Enregistrer, etc.).
Enfin, définissez l'écouteur (très probablement dans votre méthode onCreate);
la source
KeyEvent.ACTION_UP
. Pour que cela fonctionne, vous devez d'abord consommer l'ACTION_DOWN
événement:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Ensuite, vous pouvez vérifier l'ACTION_UP
événement et effectuer l'action (similaire à la réponse ci-dessus). Si vous ne consommez pas l'ACTION_DOWN
événement, vous neonEditorAction
serez pas appeléACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- n'a pu obtenir aucune des autres approches de travailLes claviers matériels génèrent toujours des événements d'entrée, mais les claviers logiciels renvoient des ID d'action et des valeurs NULL différents dans singleLine EditTexts. Ce code répond chaque fois que l'utilisateur appuie sur Entrée dans un EditText auquel cet écouteur a été défini, quel que soit EditText ou le type de clavier.
L'apparence par défaut de la touche Entrée dans singleLine = false donne une flèche courbée entrer le clavier. Lorsque singleLine = true dans le dernier EditText, la clé indique DONE, et sur les EditTexts avant elle, elle indique NEXT. Par défaut, ce comportement est cohérent sur tous les émulateurs vanilla, android et google. L'attribut scrollHorizontal ne fait aucune différence. Le test nul est important car la réponse des téléphones aux entrées logicielles est laissée au fabricant et même dans les émulateurs, les émulateurs vanille niveau 16 répondent aux longues entrées douces en plusieurs lignes et scrollHorizontal EditTexts avec un actionId de NEXT et un null pour l'événement.
la source
Cette page décrit exactement comment procéder.
https://developer.android.com/training/keyboard-input/style.html
Définissez l' android: imeOptions, puis il vous suffit de vérifier l' actionId dans onEditorAction. Donc, si vous définissez imeOptions sur 'actionDone', vous vérifierez 'actionId == EditorInfo.IME_ACTION_DONE' dans onEditorAction. Assurez-vous également de définir l'androïde: inputType.
Voici le EditText de l'exemple lié ci-dessus:
Vous pouvez également définir cela par programmation à l'aide de la fonction setImeOptions (int) . Voici le OnEditorActionListener de l'exemple lié ci-dessus:
la source
Je sais que cela a un an, mais je viens de découvrir que cela fonctionne parfaitement pour un EditText.
Il empêche tout sauf le texte et l'espace. Je ne pouvais pas tabuler, "retourner" ("\ n") ou quoi que ce soit.
la source
Tout comme un addendum à la réponse du Tchad (qui a fonctionné presque parfaitement pour moi), j'ai trouvé que je devais ajouter une vérification sur le type d'action KeyEvent pour empêcher mon code de s'exécuter deux fois (une fois à la clé et une fois à la touche enfoncée) un événement).
Voir http://developer.android.com/reference/android/view/KeyEvent.html pour des informations sur la répétition des événements d'action (en maintenant la touche Entrée) etc.
la source
J'avais un objectif similaire. Je voulais résoudre en appuyant sur la touche "Entrée" du clavier (que je voulais personnaliser) dans un AutoCompleteTextView qui étend TextView. J'ai essayé différentes solutions d'en haut et elles semblaient fonctionner. MAIS j'ai rencontré des problèmes lorsque j'ai changé le type d'entrée sur mon appareil (Nexus 4 avec AOKP ROM) de SwiftKey 3 (où cela fonctionnait parfaitement) au clavier Android standard (où au lieu de gérer mon code de l'auditeur, une nouvelle ligne était entré après avoir appuyé sur la touche "Entrée". Il m'a fallu un certain temps pour gérer ce problème, mais je ne sais pas si cela fonctionnera en toutes circonstances, quel que soit le type d'entrée que vous utilisez.
Voici donc ma solution:
Définissez l'attribut de type d'entrée de TextView dans le xml sur "texte":
Personnalisez le libellé de la touche "Entrée" du clavier:
Définissez un OnEditorActionListener sur TextView:
J'espère que cela peut aider les autres à éviter les problèmes que j'ai eus, car ils m'ont presque rendu fou.
la source
Dans votre xml, ajoutez l'attribut imeOptions à editText
Ensuite, dans votre code Java, ajoutez le OnEditorActionListener au même EditText
Voici l'explication: imeOptions = actionDone affectera "actionDone" à EnterKey. La touche EnterKey du clavier passera de "Enter" à "Done". Ainsi, lorsque la touche Entrée est enfoncée, elle déclenchera cette action et vous la manipulerez donc.
la source
Vous pouvez aussi le faire ..
la source
enter
dans mon texte d'édition, le texte d'édition entier se déplace vers le bas ... Comment résoudre ce problème?Fonctionne très bien pour moi
En plus masquer le clavier
la source
Tout d'abord, vous devez définir EditText écouter la touche appuyez sur
Deuxièmement, définissez l'événement lorsque vous appuyez sur la touche, par exemple, événement pour définir le texte de TextView:
Et enfin, n'oubliez pas d'importer EditText, TextView, OnKeyListener, KeyEvent en haut:
la source
fonctionne parfaitement
}
fonctionne parfaitement
la source
Xml
la source
Cela devrait fonctionner
la source
Tapez ce code dans votre éditeur afin qu'il puisse importer les modules nécessaires.
la source
Cela fonctionne très bien sur les téléphones LG Android. Il empêche les
ENTER
autres caractères spéciaux d'être interprétés comme des caractères normaux.Next
ou leDone
bouton apparaît automatiquement etENTER
fonctionne comme prévu.la source
Voici une fonction statique simple que vous pouvez lancer dans votre classe
Utils
ouKeyboards
qui exécutera du code lorsque l'utilisateur appuiera sur la touche retour d'un clavier matériel ou logiciel. C'est une version modifiée de l'excellente réponse de @ earlcasperla source
InputType sur le champ de texte doit être
text
en ordre pour que ce que CommonsWare dit fonctionner. Je viens d'essayer tout cela, aucun type d'entrée avant le procès et rien n'a fonctionné, Enter a continué à s'inscrire en tant que soft enter. AprèsinputType = text
, tout, y compris le setImeLabel, a fonctionné.Exemple :
android:inputType="text"
la source
la source
Une manière fiable de répondre à un <enter> dans un EditText est avec un TextWatcher , un LocalBroadcastManager et un BroadcastReceiver . Vous devez ajouter la bibliothèque de support v4 pour utiliser LocalBroadcastManager. J'utilise le tutoriel sur vogella.com : 7.3 "Événements de diffusion locale avec LocalBroadcastManager" en raison de son exemple de code concis complet. Dans onTextChanged avant se trouve l'index de la fin de la modification avant la modification >; moins le début. Lorsque dans le TextWatcher, le thread d'interface utilisateur est occupé à mettre à jour modifiable de editText, nous envoyons donc une intention de réveiller le BroadcastReceiver lorsque le thread d'interface utilisateur a terminé la mise à jour de editText.
la source
android:inputType="textCapSentences"
), les retours chariot sont filtrés hors de l'entrée afin que onTextChanged () ne soit pas appelé lorsque l'utilisateur appuie sur la touche Entrée.Cette question n'a pas encore reçu de réponse avec Butterknife
LAYOUT XML
APP JAVA
la source
En utilisant Kotlin, j'ai créé une fonction qui gère toutes sortes d'actions de type "terminé" pour EditText, y compris le clavier, et il est possible de le modifier et de gérer d'autres touches comme vous le souhaitez également:
Donc, exemple d'utilisation:
Quant au changement d'étiquette, je pense que cela dépend de l'application clavier, et qu'il ne change généralement que sur le paysage, comme écrit ici . Quoi qu'il en soit, un exemple d'utilisation pour cela:
Ou, si vous voulez en XML:
Et le résultat (montré en paysage):
la source
Ajoutez ces dépendances, et cela devrait fonctionner:
la source
Cela vous donnera une fonction appelable lorsque l'utilisateur appuie sur la touche de retour.
Usage
la source