Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Formato android edittext para mostrar espacios después de cada 4 caracteres

Android – Quiero obtener un número de entrada del usuario en un EditText – debe separarse por espacios – cada 4 caracteres. Ejemplo: 123456781234 -> 1234 5678 1234

Esto es sólo para fines visuales. Sin embargo, necesito la cadena sin espacios para uso posterior.

  • Java.lang.IncompatibleClassChangeError causado por la instanciación de ActivityTestRule
  • Alinee los botones AlertDialog al centro
  • ¿Es posible abrir mi aplicación a través de sms de la bandeja de entrada?
  • ¿Es posible obtener el perfil seleccionado actualmente del teléfono?
  • Android aceleración de hardware TextureView con lockCanvas ()
  • ¿Diferencia entre SurfaceView y View?
  • ¿Cuál es la forma más fácil de hacer esto?

  • Android youtube API reproduce dos o más jugadores de Youtube en una actividad principal
  • ¿Qué stretchMode utilizar en GridView en android
  • GoogleApiClient onConnected nunca llamado Dispositivo usable
  • ¿Cómo depurar al ejecutar pruebas Robolectric en Android Studio?
  • Uso de espera en AsyncTask
  • Cómo detener reproductor multimedia correctamente, android
  • 7 Solutions collect form web for “Formato android edittext para mostrar espacios después de cada 4 caracteres”

    Necesita utilizar TextWatcher para lograr espacios de propósito visual.

    Y utilizar cualquier cadena simplemente dividida por la lógica del espacio para unirse de nuevo o un bucle a través de la cadena entera por el carácter sabio y eliminar (char) 32 de la cadena

    ¿Es este editext para la tarjeta de crédito?
    Primero cree la variable de conteo

     int count = 0; 

    Entonces ponga esto en su oncreate (actividad) / onviewcreated (fragmento)

      ccEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (count <= ccEditText.getText().toString().length() &&(ccEditText.getText().toString().length()==4 ||ccEditText.getText().toString().length()==9 ||ccEditText.getText().toString().length()==14)){ ccEditText.setText(ccEditText.getText().toString()+" "); int pos = ccEditText.getText().length(); ccEditText.setSelection(pos); }else if (count >= ccEditText.getText().toString().length() &&(ccEditText.getText().toString().length()==4 ||ccEditText.getText().toString().length()==9 ||ccEditText.getText().toString().length()==14)){ ccEditText.setText(ccEditText.getText().toString().substring(0,ccEditText.getText().toString().length()-1)); int pos = ccEditText.getText().length(); ccEditText.setSelection(pos); } count = ccEditText.getText().toString().length(); } }); 

    Como @waqas señaló, tendrá que utilizar un TextWatcher si su objetivo es hacer que esto suceda a medida que el usuario escribe el número. Aquí hay una manera potencial de lograr los espacios:

     StringBuilder s; s = new StringBuilder(yourTxtView.getText().toString()); for(int i = 4; i < s.length(); i += 5){ s.insert(i, " "); } yourTxtView.setText(s.toString()); 

    Siempre que necesite obtener la cadena sin espacios, haga lo siguiente:

     String str = yourTxtView.getText().toString().replace(" ", ""); 

    Aquí hay una pequeña función de ayuda. Para su ejemplo lo llamaría con

    addPadding(" ", "123456781234", 4);

     /** * @brief Insert arbitrary string at regular interval into another string * * @param t String to insert every 'num' characters * @param s String to format * @param num Group size * @return */ private String addPadding(String t, String s, int num) { StringBuilder retVal; if (null == s || 0 >= num) { throw new IllegalArgumentException("Don't be silly"); } if (s.length() <= num) { //String to small, do nothing return s; } retVal = new StringBuilder(s); for(int i = retVal.length(); i > 0; i -= num){ retVal.insert(i, t); } return retVal.toString(); } 

    Cambiar el texto en vivo al escribir es algo lo difícil. Debemos manejar los siguientes problemas.

    a. Posición del cursor b. Debemos permitir que el usuario elimine el texto ingresado.

    El código siguiente controla los problemas.

    1. Añadir TextWatcher a EditText, y obtener el texto de "afterTextchanged ()" y escribir su lógica

      String str = ""; Int strOldlen = 0;

        @Override public void afterTextChanged(Editable s) { str = edtAadharNumber.getText().toString(); int strLen = str.length(); if(strOldlen<strLen) { if (strLen > 0) { if (strLen == 4 || strLen == 9) { str=str+" "; edtAadharNumber.setText(str); edtAadharNumber.setSelection(edtAadharNumber.getText().length()); }else{ if(strLen==5){ if(!str.contains(" ")){ String tempStr=str.substring(0,strLen-1); tempStr +=" "+str.substring(strLen-1,strLen); edtAadharNumber.setText(tempStr); edtAadharNumber.setSelection(edtAadharNumber.getText().length()); } } if(strLen==10){ if(str.lastIndexOf(" ")!=9){ String tempStr=str.substring(0,strLen-1); tempStr +=" "+str.substring(strLen-1,strLen); edtAadharNumber.setText(tempStr); edtAadharNumber.setSelection(edtAadharNumber.getText().length()); } } strOldlen = strLen; } }else{ return; } }else{ strOldlen = strLen; Log.i("MainActivity ","keyDel is Pressed ::: strLen : "+strLen+"\n old Str Len : "+strOldlen); } } } 
    2. Aquí estoy tratando de añadir espacio para cada cuatro caracteres. Después de agregar el primer espacio, entonces la longitud del texto es 5. Así que el siguiente espacio es después de 9 caracteres como ese.

      If (strLen == 4 || strLen == 9)

      1. Aquí otro problema es la posición del cursor, una vez que se modifica el texto del edittext, el cursor se mueve al primer lugar. Así que necesitamos poner el cursor manualmente.

      EdtAadharNumber.setSelection (edtAadharNumber.getText (). Length ());

      1. Mi longitud del texto es solamente 12 caracteres. Así que estoy haciendo cálculos manuales, si su texto es dinámico, entonces escribir lógica dinámica.

    El formato del texto es 000 000 0000

    Android edittext textwatcher formato número de teléfono como xxx-xxx-xx-xx

     public class PhoneNumberTextWatcher implements TextWatcher { private static final String TAG = PhoneNumberTextWatcher.class .getSimpleName(); private EditText edTxt; private boolean isDelete; public PhoneNumberTextWatcher(EditText edTxtPhone) { this.edTxt = edTxtPhone; edTxt.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DEL) { isDelete = true; } return false; } }); } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { if (isDelete) { isDelete = false; return; } String val = s.toString(); String a = ""; String b = ""; String c = ""; if (val != null && val.length() > 0) { val = val.replace(" ", ""); if (val.length() >= 3) { a = val.substring(0, 3); } else if (val.length() < 3) { a = val.substring(0, val.length()); } if (val.length() >= 6) { b = val.substring(3, 6); c = val.substring(6, val.length()); } else if (val.length() > 3 && val.length() < 6) { b = val.substring(3, val.length()); } StringBuffer stringBuffer = new StringBuffer(); if (a != null && a.length() > 0) { stringBuffer.append(a); if (a.length() == 3) { stringBuffer.append(" "); } } if (b != null && b.length() > 0) { stringBuffer.append(b); if (b.length() == 3) { stringBuffer.append(" "); } } if (c != null && c.length() > 0) { stringBuffer.append(c); } edTxt.removeTextChangedListener(this); edTxt.setText(stringBuffer.toString()); edTxt.setSelection(edTxt.getText().toString().length()); edTxt.addTextChangedListener(this); } else { edTxt.removeTextChangedListener(this); edTxt.setText(""); edTxt.addTextChangedListener(this); } } } 

    Más limpia de la respuesta de @ Ario que sigue el principio DRY:

     private int prevCount = 0; private boolean isAtSpaceDelimiter(int currCount) { return currCount == 4 || currCount == 9 || currCount == 14; } private boolean shouldIncrementOrDecrement(int currCount, boolean shouldIncrement) { if (shouldIncrement) { return prevCount <= currCount && isAtSpaceDelimiter(currCount); } else { return prevCount > currCount && isAtSpaceDelimiter(currCount); } } private void appendOrStrip(String field, boolean shouldAppend) { StringBuilder sb = new StringBuilder(field); if (shouldAppend) { sb.append(" "); } else { sb.setLength(sb.length() - 1); } cardNumber.setText(sb.toString()); cardNumber.setSelection(sb.length()); } ccEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { String field = editable.toString(); int currCount = field.length(); if (shouldIncrementOrDecrement(currCount, true)){ appendOrStrip(field, true); } else if (shouldIncrementOrDecrement(currCount, false)) { appendOrStrip(field, false); } prevCount = cardNumber.getText().toString().length(); } }); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.