est-il possible d'insérer automatiquement des caractères dans un I.e. Si l'utilisateur entre dans un nombre long, tel que Alors que vous tapez le nombre ci-dessus, vous le verriez être entré dans la case Actuellement, j'ai une application où vous pouvez entrer un nombre long, puis appuyer sur un bouton et elle insère les tirets pour vous, mais je suis curieux s'il pouvait être fait comme vous tapez? P>
Merci beaucoup pour toute aide. P> eittext code>
123456789012 code>, est-il possible que ce numéro apparaisse car il le tape dans la zone Edition de texte, mais avec un tableau de bord tous les 4e personnages? P>
editext code> mais ressemblerait à ceci: 1234-5678-9012. P>
6 Réponses :
En marquant Android, je pense que vous discutez de Android EditText, c'est ainsi que vous pouvez le faire en écoutant le TextChangeDlistener,
édité: pour Backspace P>
editText.addTextChangedListener(new TextWatcher() { int len=0; @Override public void afterTextChanged(Editable s) { String str = editText.getText().toString(); if(str.length()==4&& len <str.length()){//len check for backspace editText.append("-"); } } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { String str = editText.getText().toString(); len = str.length(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } });
Super. Merci beaucoup pour la réponse.
Faites également des suppression des suppressions - l'exemple donné peut rendre impossible l'espace de retour après avoir saisi 4 caractères (comme la suppression du tableau de bord ajoutera immédiatement un autre dos).
@Nick, je l'ai édité pour le retour arrière, donc ce n'est pas impossible
@LabebeBP J'ai essayé de l'utiliser. Mais si j'appuie sur l'espace arrière. - Ne supprimera pas aussi. Aussi une fois qu'un aperçu de tiret dans l'editext, le curseur sera déplacé pour transmettre
Cela n'ajoute pas de tirets à mon editext. Qu'est-ce qui pourrait être la raison?
La même chose que @figen güngör pour moi
C'était également ajouté seulement pour une fois, comment dois-je ajouter plusieurs fois?
J'ai changé mon type d'entrée EditText en nombre et j'ai donné des chiffres à "0123456789-" et fonctionne parfaitement. Merci d'avoir répondu.
@Override public void afterTextChanged(Editable s) { if(s.length() == 3 && len < s.length()){ s.append(" - "); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { len = s.length(); } This will do as well, only this code will insert " - " after 3rd character.
C'est ce que j'ai utilisé ici, vous remplacez le délimiteur avec ce que vous voulez séparer les chiffres. P> P>
Pour ceux qui sont toujours confrontés à des problèmes avec l'espace de retour et des traits d'union multiples -
new TextWatcher() { boolean hyphenExists; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { if (s.length() >= 6 && s.charAt(5) == '-') { hyphenExists = true; } else { hyphenExists = false; } Log.d("TAG", "beforeTextChanged " + s.toString()); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Log.d("TAG", "onTextChanged " + s.toString()); } @Override public void afterTextChanged(Editable s) { if (s.length() == 5) { if (!hyphenExists) s.append('-'); } Log.d("TAG", "afterTextChanged " + s.toString()); } }
Pour résoudre ce problème, j'écris une classe "autoaddtextwatcher":
1. Insérez automatiquement le texte dans EditText.
2. Insérez du texte dans EditText à des positions que vous êtes réglés.
3. Supprimer le texte dans editext à des positions Vous êtes réglé, lorsque la longueur de texte plus grande que 1.
Code Snippet: P>
import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; /** * Created by henry.chuang on 2016/5/12. */ public class AutoAddTextWatcher implements TextWatcher { private CharSequence mBeforeTextChanged; private TextWatcher mTextWatcher; private int[] mArray_pos; private EditText mEditText; private String mAppentText; public AutoAddTextWatcher(EditText editText, String appendText, int... position){ this.mEditText = editText; this.mAppentText = appendText; this.mArray_pos = position.clone(); } public AutoAddTextWatcher(EditText editText, String appendText, TextWatcher textWatcher, int... position){ this(editText, appendText, position); this.mTextWatcher = textWatcher; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { mBeforeTextChanged = s.toString(); if(mTextWatcher != null) mTextWatcher.beforeTextChanged(s, start, count, after); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { for (int i = 0; i < mArray_pos.length; i++) { if(((mBeforeTextChanged.length() - mAppentText.length() * i) == (mArray_pos[i] - 1) && (s.length() - mAppentText.length() * i) == mArray_pos[i])){ mEditText.append(mAppentText); break; } if(((mBeforeTextChanged.length() - mAppentText.length() * i) == mArray_pos[i] && (s.length() - mAppentText.length() * i) == (mArray_pos[i] + 1))){ int idx_start = mArray_pos[i] + mAppentText.length() * i; int idx_end = Math.min(idx_start + mAppentText.length(), s.length()); String sub = mEditText.getText().toString().substring(idx_start, idx_end); if(!sub.equals(mAppentText)){ mEditText.getText().insert(s.length() - 1, mAppentText); } break; } if(mAppentText.length() > 1 && (mBeforeTextChanged.length() - mAppentText.length() * i) == (mArray_pos[i] + mAppentText.length()) && (s.length() - mAppentText.length() * i) == (mArray_pos[i] + mAppentText.length() - 1)){ int idx_start = mArray_pos[i] + mAppentText.length() * i; int idx_end = Math.min(idx_start + mAppentText.length(), s.length()); mEditText.getText().delete(idx_start, idx_end); break; } } if(mTextWatcher != null) mTextWatcher.onTextChanged(s, start, before, count); } @Override public void afterTextChanged(Editable s) { if(mTextWatcher != null) mTextWatcher.afterTextChanged(s); } }
Wow mec! Tu es un génie! Merci beaucoup pour cela ... J'ai essayé tant de solutions, mais rien ne fonctionnait bien. J'avais besoin de le faire formaté comme celui-ci: 12-345-67. Toutes les autres solutions ont toujours eu des choses étranges se produisent lorsque vous avez supprimé et ensuite essayé de rentrer. Vos solutions fonctionnent parfaitement! Une chose à noter cependant, pour que votre classe fonctionne correctement, vous devez définir le type d'entrée dans le fichier XML sur Android: INPUTTYPE = "TÉLÉPHONE" CODE> J'ai essayé initialement avec
Android: INPUTYPE = "Numéro" code> et cela n'a pas fonctionné. J'ai vérifié votre page GitHub et vous a vu utiliser
téléphone code>, et cela fonctionne maintenant. Bon travail!
Voici ma mise en œuvre: EnteruserId.addtextChangeDlistener (New AutoaddtextWatcher (Enteruserid, "-", 2, 5)); code>
@Kevinbright remercie votre encouragement et votre suggestion, je vais l'essayer.
Non, merci! Je ne peux pas croire à quel point il est difficile de faire correctement à Android!
@Henrychuang: Votre code était super. Auparavant, j'ai mis en œuvre ma propre manière en luttant beaucoup. Mais votre code aidera les gens certainement. Si je veux mettre en œuvre la copie coller auditeur à votre code, comment pouvons-nous y parvenir.
@ Sham.y Copy Copolez-vous auditeur? Copier tout le texte sur edittext?
@Henrychuang: Oui, si l'utilisateur copié texte et collé dans Modifier le texte.
Bonjour, j'utilise cette classe, mais un problème que nous sommes observés est lorsque l'utilisateur apporte le curseur à l'arrière de la chaîne, la position de délimiteur est absente selon l'exigence. Pour vous suggérer s'il vous plaît suggérer de moi y avoir une solution pour cela.
Vous pouvez y parvenir sur le texte modifié
dans mon cas, je dois formater une entrée comme celle-ci: xxx xxx-xxxx p>
i fait comme indiqué ci-dessous: p>
etMobileNumber.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { if (etMobileNumber.text.length == 3 && count != 0) { val text = etMobileNumber.getText().toString() + " " etMobileNumber.setText(text) etMobileNumber.setSelection(text.length) } else if (etMobileNumber.text.length == 7 && count != 0) { val text = etMobileNumber.getText().toString() + "-" etMobileNumber.setText(text) etMobileNumber.setSelection(text.length) } } })
Quelle langue? Quelle plate-forme? Ceci, en général, est possible, mais les détails dépendent de la langue et de la plate-forme.
Dans quelle technologie? Par exemple. Dans une page Web, une application iPhone, etc.