Est-il possible d'avoir un EditText
widget avec android:inputType="textMultiLine"
set, et android:imeOptions="actionDone"
en même temps?
Je voudrais une zone d'édition multiligne, avec le bouton d'action sur le clavier pour être terminé, pas Entrée (retour chariot), mais cela ne semble pas fonctionner.
Merci d'avance
Réponses:
Utilisation
et en XML:
la source
textField.setCursorVisible(false);
intérieur d'unonEditorActionListener
De la documentation Android: ' "textMultiLine" Clavier de texte normal qui permet aux utilisateurs de saisir de longues chaînes de texte comprenant des sauts de ligne (retours chariot) . 'Par conséquent, l'attribut textMultiLine n'est pas approprié si vous voulez avoir le bouton' Terminé 'sur le clavier.
Un moyen simple d'obtenir un champ de saisie multiligne (dans ce cas 3 lignes) avec le bouton Terminé consiste à utiliser EditText avec
Cependant, pour une raison quelconque, cela ne fonctionne pour moi que si je fais ces paramètres dans le code au lieu du fichier de mise en page (dans onCreate) par
J'espère que cela aide quelqu'un, car il a fallu un certain temps pour le comprendre. Si vous trouvez un moyen de le faire fonctionner à partir du manifeste, veuillez nous en informer.
la source
maxLines()
au lieu desetLines()
si vous voulez éviter de changer la hauteur duEditText
setMaxLines(3)
) Merci beaucoup!Exemple de travail! Créez la classe EditText personnalisée ci-dessous qui prend en charge cette fonctionnalité et utilisez la classe dans le fichier xml. Code de travail:
la source
Pour ce faire dans Kotlin (et également éventuellement appliquer d'autres configurations comme
textCapSentences
vous pouvez utiliser cette fonction d'extension:Usage:
la source
setRawInputType
place desetInputType
Je pense que c'est la façon de faire votre chose. Avoir
android:inputType="textMultiLine"
,android:imeOptions="actionDone"
rend la fonctionnalité de clé d'entrée ambiguë. Gardez simplement à l'esprit que vous pouvez utiliserandroid:lines="10"
et peut-être supprimerandroid:inputType="textMultiLine"
, mais cela dépend de ce que vous voulez réaliser, parfois vous avez juste besoin duandroid:inputType="textMultiLine"
et il n'y a pas de remplacement.la source
Cela semble fonctionner parfaitement pour moi
la source
Solution Kotlin réutilisable
Définir ces valeurs dans le code était la seule chose qui fonctionnait pour moi
J'en ai besoin fréquemment, alors faites ceci pour garder le code propre:
Si vous souhaitez ajouter une action personnalisée facultative sur "Terminé", essayez ceci:
Ensuite, ajoutez un
hideKeyboard()
appelEditText.multilineDone
la source
Réponse courte: Non, je pense que ce n'est pas possible avant le niveau d'API 11 (3.0).
Le même problème a surgi ici (discuté dans les commentaires de la réponse acceptée):
Bouton d'action du clavier logiciel Android
Du commentaire final:
la source
Une façon simple de contourner cette situation:
conservez ces attributs sur EditText:
puis ajoutez ce code pour masquer uniquement le clavier lorsque vous appuyez sur ENTRÉE:
la source
S'il ne s'agit pas de l'apparence du clavier à l'écran, vous pouvez simplement mettre un écouteur d'entrée sur le clavier et déclencher l'état «terminé» si l'utilisateur entre une nouvelle ligne.
la source
si vous utilisez l'option d'entrée textImeMultiline avec imeoptions flagnext et actionnext, vous obtenez un bouton suivant au lieu du retour de cariage
la source
Bien qu'aucune des autres solutions n'ait jamais fonctionné pour moi, ce qui suit a fonctionné à merveille et m'a sauvé des jours et des jours de recherche sur Google, avec quelques rebondissements bien sûr. Malheureusement, je ne me souviens pas d'où j'ai obtenu le code exactement et je ne peux donc pas donner à l'auteur le crédit qu'il mérite.
Dans votre code Java:
la source
Je suis sur 4.x et j'ai essayé d'appeler setHorizontallyScrolling () (avec ou sans setLine () ou setMaxLines ()), ainsi que de nombreuses configurations XML différentes pour afficher le bouton Done. Aucun d'eux n'a fonctionné. L'essentiel est que si votre EditText est multi-lignes, Android voudra toujours afficher le retour chariot au lieu du bouton "Terminé", à moins que vous n'ayez mis un hack autour de cela.
La solution la moins compliquée que j'ai trouvée qui n'implique pas de remapper le comportement du retour chariot est ici: https://stackoverflow.com/a/12570003/3268329 . Cette solution annulera le désir incessant d'Android de forcer le paramétrage de l'indicateur IME_FLAG_NO_ENTER_ACTION pour les vues multilignes, ce qui fera disparaître le bouton Terminé.
la source
J'ai aussi eu du mal pendant un certain temps, mais j'ai finalement trouvé une solution!
Créez simplement une classe EditText personnalisée en tant que telle:
Cette classe supprime lineBreaks (\ n), encapsule le texte comme le ferait textMultiline, ET vous permet de remplacer le bouton Entrée par un ImeAction;).
Il vous suffit de l'appeler dans votre XML au lieu de la classe classique EditText.
Pour expliquer la logique ici:
la source
La solution de travail est ici, créez votre EditTextView personnalisé (étendez simplement une vue de texte) et remplacez onInputConnection avec un morceau de code que vous trouverez dans la réponse acceptée ici: Multiline EditText with Done SoftInput Action Label on 2.3
la source