9

J'essaye de créer un EditText avec la capitalisation automatique et la correction automatique mises en application. J'ai manuellement trouvé comment ajouter InputFilter s pour permettre la capitalisation automatique, bien que cela fonctionne seulement après la première lettre est tapée, et je n'ai eu aucune chance avec la correction automatique (j'ai essayé de créer un InputFilter qui a utilisé AutoText, mais Je ne suis pas sûr de comment tout cela fonctionne). Idéalement, je pourrais simplement utiliser EditText.setInputType (...) pour tout gérer, mais jusqu'à présent cela n'a pas fonctionné. Y a-t-il un moyen d'y parvenir? Ma tentative échouée est montrée ci-dessous (je reçois juste une entrée normale).Comment définir plusieurs types d'entrée dans un EditText sur Android?

EditText mEditText = new EditText(this); 
int inputType = InputType.TYPE_CLASS_TEXT; 
if (auto_capitalize) { 
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS; 
} 
if (auto_correct) { 
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT; 
} 
mEditText.setInputType(inputType); 

S'il vous plaît noter, je ne suis intéressé par les solutions pour la création de ce EditText dans le code - et non via XML.

Modifier

J'ai trouvé son nouveau documentation décrivant TextKeyListener, mais après avoir essayé d'utiliser:

mEditText.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.CHARACTERS, true)); 

et en utilisant l'idée de @ farble1670 d'utiliser setRawInputType, afin de ne pas affecter la KeyListener s, il n'y a toujours pas de changement au texte.

Répondre

2

Oui, il semble que cela devrait fonctionner. cependant, en regardant les docs,

Le type de données placé dans un champ de texte, utilisé pour aider une méthode d'entrée décider comment laisser l'utilisateur saisir du texte. Les constantes ici correspondent à celles définies par InputType. Généralement, vous pouvez sélectionner une valeur unique , bien que certains puissent être combinés ensemble comme indiqué. La définition de cet attribut sur autre chose que none signifie également que le texte est modifiable.

http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

il ressemble en général, vous ne pouvez pas vous attendre à définir deux valeurs.

également, si vous regardez android: setInputType, il indique que cela correspond à la méthode setRawInputType(), pas setInputType(). vous pouvez essayer d'appeler setRawInputType() à la place de setInputType().

http://developer.android.com/reference/android/widget/TextView.html#setRawInputType(int)

+0

Merci, cela m'a conduit dans une nouvelle direction, et j'ai trouvé le 'TextKeyListener'. La seule chose est - cela ne semble pas fonctionner non plus ... – Phil

29

Grâce à XML, il serait la configuration comme ceci.

android:inputType="textMultiLine|textNoSuggestions" 

Vous ajoutez simplement un tuyau (|) entre les variables. Je vois que vous le faisiez à travers le code, mais je jetais juste là pour référence.

+1

Ma question précise spécifiquement que je ne suis pas intéressé par une solution 'XML'. – Phil

+2

J'ai trouvé votre question lors de la recherche, je mettais la solution XML pour la prochaine personne qui trouve cela, mais cherchait une solution XML comme je l'étais .... – f1vefour

6

J'espère que vous avez trouvé une réponse à la question. La réponse pourrait aider ceux qui viennent au fil plus tard. Ainsi, vous pouvez définir plusieurs tags de la même manière que vous le faites en XML en utilisant un | (pipe). Quelque chose comme:

EditText mEditText = new EditText(this); 
mEditText.setInputType(InputTpe.TYPE_TEXT_FLAG_CAP_CHARACTERS|InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 

En outre, selon votre situation vous pouvez utiliser setInputType ou setRawInputype.

+0

Ceci est la bonne solution. – Tommie

Questions connexes