Format EditText vue pour les numéros de téléphone

J'ai une vue EditText et je veux qu'elle forme la saisie de l'utilisateur dans le format du numéro de téléphone. Par exemple, lorsque l'utilisateur tape 1234567890, la vue EditText doit l'afficher dynamiquement comme "(123) 456-7890" dès que les 3 premiers numéros sont entrés.

J'ai essayé ce qui suit dans mon OnCreate mais cela ne semblait rien faire pour moi …

  • Groupes fermés dans ExpandableListView
  • Renouveler l'appel à l'intérieur de AsyncTask
  • Composants de gravité de l'accéléromètre
  • Android studio CPU Usage outil de performance-comprendre la trace
  • Activité Android sans ActionBar
  • Déplacer les mises en page lorsque le clavier est affiché?
  • EditText ET = (EditText) findViewById(R.id.add_number); ET.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); 

    Comment puis-je obtenir l'entrée de l'utilisateur à afficher dans le format de numéro de téléphone?

  • Comment puis-je spécifier un null en tant qu'attribut XML pour Android?
  • Correction de l'activité d'activité de l'activité de connexion Android (Studio)
  • Android 4.0, le texte sur la barre d'action NE JAMAIS afficher
  • Gradle exclut R.java dans Android Javadocs lorsque les classes internes dépendent de R.java
  • Erreur d'autorisation de stockage dans Marshmallow
  • Geofencing est-il complètement inutilisable dans Android?
  • 7 Solutions collect form web for “Format EditText vue pour les numéros de téléphone”

    Avec ce code, vous pouvez créer un TextWatcher personnalisé et créer le format que vous désirez:

     ET.addTextChangedListener(new PhoneNumberFormattingTextWatcher() { //we need to know if the user is erasing or inputing some new character private boolean backspacingFlag = false; //we need to block the :afterTextChanges method to be called again after we just replaced the EditText text private boolean editedFlag = false; //we need to mark the cursor position and restore it after the edition private int cursorComplement; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //we store the cursor local relative to the end of the string in the EditText before the edition cursorComplement = s.length()-ET.getSelectionStart(); //we check if the user ir inputing or erasing a character if (count > after) { backspacingFlag = true; } else { backspacingFlag = false; } } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // nothing to do here =D } @Override public void afterTextChanged(Editable s) { String string = s.toString(); //what matters are the phone digits beneath the mask, so we always work with a raw string with only digits String phone = string.replaceAll("[^\\d]", ""); //if the text was just edited, :afterTextChanged is called another time... so we need to verify the flag of edition //if the flag is false, this is a original user-typed entry. so we go on and do some magic if (!editedFlag) { //we start verifying the worst case, many characters mask need to be added //example: 999999999 <- 6+ digits already typed // masked: (999) 999-999 if (phone.length() >= 6 && !backspacingFlag) { //we will edit. next call on this textWatcher will be ignored editedFlag = true; //here is the core. we substring the raw digits and add the mask as convenient String ans = "(" + phone.substring(0, 3) + ") " + phone.substring(3,6) + "-" + phone.substring(6); ET.setText(ans); //we deliver the cursor to its original position relative to the end of the string ET.setSelection(ET.getText().length()-cursorComplement); //we end at the most simple case, when just one character mask is needed //example: 99999 <- 3+ digits already typed // masked: (999) 99 } else if (phone.length() >= 3 && !backspacingFlag) { editedFlag = true; String ans = "(" +phone.substring(0, 3) + ") " + phone.substring(3); ET.setText(ans); ET.setSelection(ET.getText().length()-cursorComplement); } // We just edited the field, ignoring this cicle of the watcher and getting ready for the next } else { editedFlag = false; } } }); 

    Assurez-vous de limiter la durée de l'édition en XML à 14 caractères

     <EditText android:id="@+id/editText_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="phone" android:lines="1" android:maxLength="14"/> 

    J'ai fait une combinaison de choses, j'ai modifié mon type d'entrée au téléphone, puis j'ai utilisé regex pour supprimer tous les caractères non numériques: phonenumber = phonenumber.replaceAll ("\ D", "");

    Étape 1: Ici, le code pour le champ de saisie dans le fichier XML.

      <EditText android:id="@+id/editText_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="phone" android:lines="1" android:maxLength="14"/> 

    Étape 2: Voici le code ajouter dans le MainFile.java

      phoneNo = (EditText)findViewById(R.id.editText_phone); phoneNo.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); 

    Sortie: Il vous donnera le nombre comme (123)456-7890

    Dans votre mise en page, réglez le mode d'entrée sur "téléphone"

    http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputMethod http://developer.android.com/reference/android/text/InputType.html#TYPE_CLASS_PHONE

     <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="phone" /> 

    Si cela ne convient pas à vos besoins, ajoutez un auditeur à votre EditText et formatez le texte manuellement à chaque frappe.

      editText.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP) { // format your EditText here } return false; } }); 

    Essaye ça

    La méthode PhoneNumberFormattingTextWatcher () ne fonctionnait pas, j'ai essayé d'attribuer enfin les solutions

    1. Dans votre fichier xml, collez ce

       <EditText android:id="@+id/editTextId" android:layout_height="wrap_content" android:layout_width="match_parent" android:inputType="phone" android:digits="0123456789+" /> 
    2. Dans votre méthode oncreate, collez ceci

       final EditText editText = (EditText) findViewById(R.id.editTextId); editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { String text = editText.getText().toString(); int textLength = editText.getText().length(); if (text.endsWith("-") || text.endsWith(" ") || text.endsWith(" ")) return; if (textLength == 1) { if (!text.contains("(")) { editText.setText(new StringBuilder(text).insert(text.length() - 1, "(").toString()); editText.setSelection(editText.getText().length()); } } else if (textLength == 5) { if (!text.contains(")")) { editText.setText(new StringBuilder(text).insert(text.length() - 1, ")").toString()); editText.setSelection(editText.getText().length()); } } else if (textLength == 6) { editText.setText(new StringBuilder(text).insert(text.length() - 1, " ").toString()); editText.setSelection(editText.getText().length()); } else if (textLength == 10) { if (!text.contains("-")) { editText.setText(new StringBuilder(text).insert(text.length() - 1, "-").toString()); editText.setSelection(editText.getText().length()); } } else if (textLength == 15) { if (text.contains("-")) { editText.setText(new StringBuilder(text).insert(text.length() - 1, "-").toString()); editText.setSelection(editText.getText().length()); } } else if (textLength == 18) { if (text.contains("-")) { editText.setText(new StringBuilder(text).insert(text.length() - 1, "-").toString()); editText.setSelection(editText.getText().length()); } } } }); 

    SORTIE : – Entrez la description de l'image ici

    Dans votre code Java, vous pouvez utiliser

    yourEditText.setInputType(InputTytpe.TYPE_CLASS_PHONE)

    Ou dans votre xml

    android:inputType="phone"

    Java

    XML

    Vous pouvez soit le faire avec JQuery validate (événement onkeyup) afin que vous puissiez faire un formatage dynamique pendant qu'ils écrivent (jarring expérience là-bas à contempler) – ou vous pouvez le faire avec une bibliothèque MVVM tel que RAZOR ou KnockoutJS (comme ils sortent du champ) .

    Des exemples de ce que vous voulez faire sont à la fois sur le site de documentation JQuery Validate, ainsi que sur le site KS knock-out.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.